使用不同的变量启动相同构建的 2 个 docker
start 2 dockers of the same build with different variables
我有以下 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
也许有一种方法可以在 docker-compose up
期间不通过构建参数而是直接将 SIGNAL_ID
传递给 Dockerfile
?
类似于 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 所在的目录中,放置一个带有环境变量的文件:
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
前面的变量
Link 更多文档:https://docs.docker.com/compose/environment-variables/#the-env-file
我有以下 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
也许有一种方法可以在 docker-compose up
期间不通过构建参数而是直接将 SIGNAL_ID
传递给 Dockerfile
?
类似于 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 所在的目录中,放置一个带有环境变量的文件:
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
Link 更多文档:https://docs.docker.com/compose/environment-variables/#the-env-file