创建节点映像时,如何获取mongo容器的IP地址并将其设置为环境变量?
我一直遇到技术堆栈冲突的问题:keystone.js,forever和docker.我的问题是我需要为一个单独的mongo容器设置一个环境变量,这在启动包含以下内容的容器时运行shell脚本似乎很容易做到:
export MONGO_URI="mongodb://${MONGODB_PORT_27017_TCP_ADDR}:27017/(db_name)"
问题在于启动梯形校正应用程序.通常,我会将其放在相同的脚本中,并通过docker run调用它,但是我们需要永远使用这个项目.命令将永远是keystone.js.这样做有一个问题,即Docker容器会立即掉落.如果我通过简单的永久启动而不是转到脚本启动应用程序,则该应用程序可以正常启动,但未设置所需的env变量.它在docker映像中进行了硬编码,但这当然不是一个好的解决方案,因为mongodb的ip将来可能会更改,然后在节点容器重启时将无法找到该数据库.看到几种可能性:
>切换到仅使用节点keystone.js,将失去永久启动的功能(如果发生严重故障,它将重新启动应用程序).经过测试,这行得通,但也许有人知道一种可以永久工作或可行的替代方法?
>找到一种在创建映像时从docker文件设置上述导出的方法.尚未能够使它正常工作,但我确实知道mongdb将使用的名称,无论是否有帮助
非常感谢您的帮助.
最佳答案
最好的方法是使用docker link,这为您提供了一个环境变量的主机名.
docker run ... --link mongodb:mongodb ..
您也可以使用run中的命令行选项
docker run -e MONGO_URI="mongodb://${MONGODB_PORT_27017_TCP_ADDR}:27017/(db_name)"
动态DNS的选项为SkyDNS + SkyDock.