启动时在Docker容器中创建环境变量

时间:2014-12-09 17:14:08

标签: node.js docker forever keystonejs

在创建节点图像时,如何获取mongo容器的ip地址并将其设置为环境变量?

我遇到了冲突技术堆栈的问题:keystone.js,forever和docker。我的问题是我需要为一个单独的mongo容器设置一个环境变量,当我启动包含以下内容的容器时,运行shell脚本似乎很容易做到:

export MONGO_URI="mongodb://${MONGODB_PORT_27017_TCP_ADDR}:27017/(db_name)"

问题在于启动keystone应用程序。通常我会将它放在同一个脚本中并使用docker run调用它,但我们需要永远使用这个项目。命令为forever keystone.js。这有一个问题,即docker容器立即掉落。如果我使用简单的forever start启动应用程序而不是去脚本,应用程序启动正常,但未设置所需的env变量。它在docker镜像中硬编码,但当然这不是一个好的解决方案,因为mongodb的ip可能在将来发生变化,然后在节点容器重启时它将无法找到db。看到几种可能性:

  1. 切换到仅使用节点keystone.js,将失去永久启动的功能(如果出现严重故障,将重启应用程序)。经过测试,这可行,但也许有人知道一种永久工作或可行的替代方法?

  2. 在创建图像时,找到一种从docker文件设置上述导出的方法。 Haven能够让这个工作起来但我确实知道mongdb将使用的名称,无论如何有用

  3. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

最好的方法是使用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