node.js-启动时在Docker容器中创建环境变量

创建节点映像时,如何获取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.

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...