Ata*_*rus 2 docker docker-compose
我会使用环境文件在 docker compose 文件中设置一些变量,以选择要使用的环境:dev、qualif、prod,...但是变量替换无法按我的预期工作。这是我的 docker compose 文件的摘录:
version: '3.4'
x-propertyfile: &propertyfile dev.env
services:
registry:
image: sensor-registry
env_file: *propertyfile
container_name: ${REGISTRY_NAME}
...
other-services:
...
Run Code Online (Sandbox Code Playgroud)
我的 dev.env 文件:
REGISTRY_NAME=registry
... other values
Run Code Online (Sandbox Code Playgroud)
但是当我启动我的 docker-services 时
docker-compose -f compose-file.yml up
Run Code Online (Sandbox Code Playgroud)
我收到消息:
WARNING: The REGISTRY_NAME variable is not set. Defaulting to a blank string.
Run Code Online (Sandbox Code Playgroud)
我尝试设置 env_file 而不使用自定义属性:
services:
registry:
image: sensor-registry
env_file: dev.env
container_name: ${REGISTRY_NAME}
Run Code Online (Sandbox Code Playgroud)
那是行不通的。同上,如果我直接设置变量:
services:
registry:
image: sensor-registry
environment:
- REGISTRY_NAME: registry
container_name: ${REGISTRY_NAME}
Run Code Online (Sandbox Code Playgroud)
但如果我使用默认的环境文件 (.env),那就可以了。我可以通过以下方式启动我的服务:
cat dev.env > .env && docker-compose -f composefile.yml up
Run Code Online (Sandbox Code Playgroud)
但我想了解为什么变量替换不适用于 env_file。我有什么错吗?
谢谢
env_file键(与 环境键类似)用于设置仅在容器内使用的环境变量。
\n\n对于要在 docker-compose.yml 文件中插入的变量,它们必须通过以下方式之一来自主机:
\n\ndocker-compose up(例如FOO=bar docker-compose up:)那么,当您在 docker-compose.yml 文件中使用时:
\n\nenv_file: dev.env\nRun Code Online (Sandbox Code Playgroud)\n\ndev.env文件中定义的环境变量 只能在容器内部使用,而不能在 docker-compose.yml 文件中使用。
\n\n文档中的两个相关摘录是:
\n\n\n\n\n\n\n您可以使用 \xe2\x80\x98env_file\xe2\x80\x99 选项将多个环境变量从外部文件传递到 service\xe2\x80\x99s 容器,就像使用 docker run --env-file=FILE 一样。 ..:
\n
再往下:
\n\n\n\n\n您可以在名为 .env 的环境文件中为 Compose 文件中引用的任何环境变量设置默认值,或用于配置 Compose
\n
后者可能有点令人困惑,但这意味着如果在.env文件中指定了 FOO 和 BAR,则可以在 docker-compose 文件中执行此操作:
\n\none-service:\n environment:\n - FRAMEWORK=${FOO}\n\n\nother-service:\n image: bash:4\n container_name: ${BAR}\nRun Code Online (Sandbox Code Playgroud)\n\n并且在该文件中还有特殊的环境变量(COMPOSE_ *)来配置 Docker-compose。
\n\n接下来,作为副作用,如果您在撰写文件中使用:
\n\nenv_file: .env\nRun Code Online (Sandbox Code Playgroud)\n\n同一组环境变量在容器内部和 docker-compose 文件中同样可用。
\n\n您找到的用于配置多个环境的解决方案的替代方案是使用和合并(组合)多个撰写文件。
\n\n为了说明这一点,这里有一个半假设的示例,您可以在其中创建以下 docker compose 文件:
\n\n您指定如下:
\n\ndocker-compose.core.yml:
\n\nservices:\n web:\n image: nginx\n volumes:\n - ./nginx.conf:/etc/nginx/sites-availables/default\n networks:\n - backend\n dns:\n - 8.8.8.8\n - 9.9.9.9\n ports:\n - 80:80\n - 443:443\nRun Code Online (Sandbox Code Playgroud)\n\ndocker-compose.dev.yml:
\n\nservices:\n web:\n container_name: dev_server\n ports:\n - 8080:80\n - 8443:443\nRun Code Online (Sandbox Code Playgroud)\n\ndocker-compose.test.yml:
\n\nservices:\n web:\n container_name: test_server\nRun Code Online (Sandbox Code Playgroud)\n\n然后在开发上:
\n\n$ docker-compose -f docker-compose.core.yml -f docker-compose.dev.yml up -d web\nRun Code Online (Sandbox Code Playgroud)\n\n测试中:
\n\n$ docker-compose -f docker-compose.core.yml -f docker-compose.test.yml up -d web\nRun Code Online (Sandbox Code Playgroud)\n\n该功能的文档位于Docker compose CLI 概述中
\n\n如果您不想输入所有这些文件名,您可以将它们设置在主机上的特殊环境变量中:
\n\n在开发上:
\n\nCOMPOSE_FILE=docker-compose.core.yml:docker-compose.dev.yml\nRun Code Online (Sandbox Code Playgroud)\n\n测试中:
\n\nCOMPOSE_FILE=docker-compose.core.yml:docker-compose.test.yml\nRun Code Online (Sandbox Code Playgroud)\n\nCOMPOSE_FILE的文档可以在Compose CLI 环境变量中找到
\n\n希望能帮助到你。
\n| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |