我是 Docker 新手,我很难根据需要设置 docker 容器。我有一个 nodejs 应用程序在启动时可以带两个参数。例如,我可以使用
node server.js 0 dev
或者
node server.js 1 prod
在生产模式和开发模式之间切换并确定是否应该打开集群。现在我想创建带有参数的 docker 图像来做类似的事情,到目前为止我唯一能做的就是调整 Dockerfile 有一条线
CMD [ "node", "server.js", "0", "dev"]
和
docker build -t me/app .
构建 docker。
然后 docker run -p 9000:9000 -d me/app
运行docker。
但是如果我想切换到 prod 模式,我需要将 Dockerfile CMD 更改为
CMD [ "node", "server.js", "1", "prod"]
,
我需要杀死在端口 9000 上监听的旧的并重建图像。我希望我能有类似的东西
docker run -p 9000:9000 environment=dev cluster=0 -d me/app
创建映像并使用“环境”和“集群”参数运行 nodejs 命令,因此我不需要更改 Dockerfile 并重新构建 docker。我怎样才能做到这一点?
原文由 Jaaaaaaay 发布,翻译遵循 CC BY-SA 4.0 许可协议
确保您的 Dockerfile 使用
ENV
声明环境变量:ENV <key> <value>
表格可以 替换为 inline 。然后你可以 使用 docker run 传递一个环境变量。请注意,每个变量都需要一个特定的
-e
标志才能运行。或者您可以 通过撰写文件设置它们:
您的 Dockerfile
CMD
可以使用该环境变量,但是,如 问题 5509 中所述,您需要以sh -c
形式这样做:与 Builder RUN 相同的想法(也适用于
CMD
):