如何解决如何在 docker-compose 文件中参数化可以在有和没有 env 文件的情况下运行的变量
我是 docker 新手。我最近从我们的组织 ACR 中遇到了一个 docker-compose 文件,端口被定义为 compose 文件中的变量。我没有在 docker-compose 文件中使用该图像的 docker 文件。
version: "3"
services:
webapp:
image: p32d1830151.azurecr.io/web/weblogic:0.1
container_name: banker
hostname: banker
ports:
- "${URL_PORT}:8080"
- "${TCP_PORT}:12345"
这个 docker-compose.yml 文件的优点是
- 它可以通过 docker-compose up -d 来执行。取默认值
- 它可以使用 docker-compose --env-file d.env up -d 执行,用 env 文件中的值覆盖默认值。
我试图用不同于相同的 docker 图像来实现相同的目标,但它失败并出现错误
docker-compose up -d
WARNING: The URL_PORT variable is not set. Defaulting to a blank string.
WARNING: The TCP_PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.webimage.ports contains an invalid type,it should be a number,or an object
services.webimage.ports contains an invalid type,or an object
但是如果我将端口定义为
ports:
- "URL_PORT:8080"
- "TCP_PORT:12345"
或
ports:
- "URL_PORT:${URL_PORT}"
- "TCP_PORT:${TCP_PORT}"
- 有 - "${URL_PORT}:8080" - "${TCP_PORT}:12345" 对于任何...?如果是这样,请让我知道如何进行这项工作?
- 是否应该在 docker 文件中添加一些内容?
- 我们有这方面的一些文档吗?
- 我如何获得这种灵活性?
解决方法
1 这是如何工作的?
请注意,${}
或单个 $
会替换 docker-compose.yml
中的环境变量。
这意味着当您设置环境变量时,如 URL_PORT
docker-compose 将用其值替换 $URL_PORT
。
可以通过在执行 export URL_PORT=1234
之前运行 docker-compose up -d
或在当前目录中放置一个包含 .env
的 URL_PORT=1234
文件来设置环境变量。
2 是否应该在 docker 文件中添加一些内容?
不,您不必向 Dockerfile
中添加任何内容
3 我们有这方面的文档吗?
见:Environment variables in Compose
4 我如何获得这种灵活性?
通过设置环境变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。