提问人:John Doe 提问时间:11/17/2023 更新时间:11/17/2023 访问量:34
Docker compose 重复式变量
Docker compose duplicit variables
问:
我的文件中的示例片段:
docker-compose.yaml:
services:
banana:
container_name: banana
hostname: banana
build:
context: ../..
dockerfile: .devcontainer/pycharm/Dockerfile
args:
B_LOGIN: ${B_LOGIN}
B_TOKEN: ${B_TOKEN}
LOG_LEVEL: INFO
environment:
LOG_LEVEL: INFO
PYTHONPATH: /workspace
volumes:
- ../..:/workspace:cached
command: sleep infinity
Docke文件:
ARG B_LOGIN
ARG B_TOKEN
ARG LOG_LEVEL
RUN echo "${B_LOGIN}, ${B_TOKEN}, ${LOG_LEVEL}"
...
.env:
B_LOGIN="aaaa"
B_TOKEN="bbbb"
然后在我的应用程序中,我用来获取日志级别。os.getenv("LOG_LEVEL", "DEBUG")
如果我只在 中设置了我的变量,而在我的 中没有变量,则不会设置为 。
有没有办法设置一次,而不是在我的两个和里面?LOG_LEVEL
args:
environment:
docker-compose.yaml
LOG_LEVEL
INFO
LOG_LEVEL
environment:
args:
docker-compose.yaml
我需要传递到我的 Dockerfile 并在我的应用程序中使用它。LOG_LEVEL
如果所有变量都可以在我的应用程序中不重复,然后在 Dockerfile 和我的应用程序中使用它们,我希望它。docker-compose.yaml
答:
1赞
Hans Kilian
11/17/2023
#1
ARG 在构建时设置一个值。您可能希望在运行时设置变量,以便可以更改登录名和令牌值,而无需再次生成映像。
为此,请在 docker compose 文件中将变量定义为环境变量,如下所示
services:
banana:
container_name: banana
hostname: banana
build:
context: ../..
dockerfile: .devcontainer/pycharm/Dockerfile
environment:
LOG_LEVEL: INFO
PYTHONPATH: /workspace
B_LOGIN: ${B_LOGIN}
B_TOKEN: ${B_TOKEN}
LOG_LEVEL: INFO
volumes:
- ../..:/workspace:cached
command: sleep infinity
这些变量在生成时不可用,因此您不能使用 RUN 语句回显它们,因为该语句在生成时运行。但它们将在运行时可用于您的应用程序。
您无需在 Dockerfile 中定义环境变量,并且由于 RUN 语句不起作用,因此您可以删除问题中 Dockerfile 的 4 个语句。
评论
0赞
John Doe
11/17/2023
感谢您的回答!echo 命令只是一个例子。B_LOGIN和密码只需要一次即可获取库,所以我猜是构建时变量?我正在使用 log_level 为行为命令设置别名。我想我可以在 Dockerfile 以外的某个地方设置别名,但不知道在哪里。还需要在运行时使用它,因此更喜欢仅作为运行时 var。
评论
LOG_LEVEL: $LOG_LEVEL
environment