如何解决使用不同的变量启动2个相同构建的docker
我有以下Dockerfile
:
# beginning of the the docker ...
ARG SIGNAL_ID
CMD python ./my_repo/my_main.py --signal_id $SIGNAL_ID
我还有一个docker-compose.yml
,其中包含服务所需的所有信息
version: '3'
services:
my_app:
build: .
# additional info ...
如何基于相同的Docker文件运行具有不同SIGNAL_ID
的两个服务?
我尝试了以下操作,但是我不确定如何运行它们,因为它们都将被命名为my_app
:
docker-compose build --build-arg SIGNAL_ID=5
docker-compose build --build-arg SIGNAL_ID=6
也许有一种方法可以不在SIGNAL_ID
期间将Dockerfile
传递给docker-compose up
,而不通过build-arg?
与docker run -e SIGNAL_ID=5
类似吗?
您可以有两个不同的docker-compose.yml
,但是考虑到它们之间的唯一区别就是SIGNAL_ID
,我想避免这种情况。
解决方法
最直接的解决方案是使$SIGNAL_ID
不是构建参数,而是环境变量。从这里可以看出,它仅在运行时使用(在CMD
命令中使用),而不在构建期间使用。
所以您可以做的是:
从Dockerfile中删除ARG
命令:
CMD python ./my_repo/my_main.py --signal_id $SIGNAL_ID
在您的docker-compose
文件中,创建两个具有不同环境变量的服务:
version: '3'
services:
my_app1:
environment:
- SIGNAL_ID=1
my_app2:
environment:
- SIGNAL_ID=2
就是这样。您现在可以开始使用
docker-compose up
要在没有docker-compose的情况下开始,您只需
docker build -t image-name .
docker run -e SIGNAL_ID=1 image-name
docker run -e SIGNAL_ID=2 image-name
,
我将使用环境变量。您有以下选择:
示例docker-compose.yaml
(MESSAGE
将显示在网络服务器上)
version: '3'
services:
web:
environment:
MESSAGE: ${MESSAGE}
image: "bithavoc/hello-world-env"
ports:
- "3000:3000"
-
.env
文件
在docker-compose.yaml所在的目录中,放置一个带有env变量的文件:
MESSAGE="Message from File"
要运行它:
docker-compose up
测试一下:
curl localhost:3000
应该从.env
文件中打印文本。
- 通过CLI导出变量
要运行它:
MESSAGE="Message from CLI" docker-compose up
要测试:
curl localhost:3000
应该显示您在docker-compose up
前面的变量
更多文档的链接:https://docs.docker.com/compose/environment-variables/#the-env-file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。