3

创建节点映像时,如何获取 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而不是去脚本启动应用程序,应用程序启动正常但未设置所需的环境变量。它在 docker 映像中进行了硬编码,但这当然不是一个好的解决方案,因为 mongodb 的 ip 将来可能会更改,然后在节点容器重新启动时它将无法找到数据库。查看几种可能性:

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

  2. 在创建镜像时,想办法从 docker 文件中设置上述导出。无法让它工作,但我知道 mongdb 将使用的名称,无论这是否有帮助

非常感谢任何帮助。

4

1 回答 1

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

于 2014-12-09T22:03:44.857 回答