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

标签 node.js docker forever keystonejs

创建 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 容器重新启动时它将无法找到数据库。查看几种可能性:

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

  2. 想办法在创建镜像的时候设置上面从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/

相关文章:

Node.js 程序错误 (Module.js)

java - Docker 或 Vagrant 是否有助于为我们的企业产品创建测试机

node.js - NodeJS/Forever 归档日志

使用 Docker 通过 Elastic Beanstalk 部署 Node.js

node.js - express-ws如何定期检查自定义事件并自动采取行动

javascript - 获取循环套接字对象nodejs的属性

docker - 带有 k8s pv : Error opening query log file"file=/prometheus/queries. active err="open/prometheus/queries.active: permission denied"的普罗米修斯

java - Spark Kubernetes - 使用 --files 或 spark.files 将配置文件从驱动程序复制到执行程序时出现 FileNotFoundException

node.js - 如何获取在forever npm 中运行的NodeJs 应用程序的日志?

node.js - 如何杀死重新启动的进程? (永远)