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.

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...