我对 docker compose 有疑问,我想使用内部容器变量来创建另一个变量:
myapp:
image: image
depends_on:
- anotherimage
environment:
- "VAR1=var1"
- "VAR2=${HOSTNAME}_${VAR1}"
我在 VAR2 中得到的是 docker 引擎主机的主机名,而 VAR1 没有
我想要类似的东西:
39ed52c98e92_var1
我对 docker compose 有疑问,我想使用内部容器变量来创建另一个变量:
myapp:
image: image
depends_on:
- anotherimage
environment:
- "VAR1=var1"
- "VAR2=${HOSTNAME}_${VAR1}"
我在 VAR2 中得到的是 docker 引擎主机的主机名,而 VAR1 没有
我想要类似的东西:
39ed52c98e92_var1
docker-compose
Docker-compose 从运行命令的环境而不是容器内部解析 compose 文件中的变量。如果要从容器内部配置环境,则需要将其添加到容器运行的命令或入口点。如果您还没有入口点,您可以创建一个:
#!/bin/sh
export VAR2=${HOSTNAME}_${VAR1}
exec "$@"
要使用它,您的 Dockerfile 将有两行额外的行:
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
确保chmod 755 entrypoint.sh
在运行您的docker build
.
编辑: VAR1 无法在您的 yml 中解析是一个类似的问题。每个变量都由 docker-compose 为容器定义,但这不会改变 docker-compose 正在使用的主机上的环境。因此,您不能在 yml 的后面几行中使用该变量。