创建 Node 镜像时如何获取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 将来可能会改变,然后在 Node 容器重新启动时它将无法找到数据库。查看几种可能性:
切换到仅使用 Node 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 .
关于node.js - 启动时在 Docker 容器中创建环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27384808/