Docker Compose - 从环境变量设置布尔值

4
我的Docker Compose期望一个布尔值(文档):
version: '3.8'

services:
  backend:
    build:
      no_cache: ${NO_CACHE}

我这样触发构建:
NO_CACHE=true docker compose up

但我得到了错误

services.backend.build.no_cache must be a boolean

我尝试过在阅读了这个SO答案Docker文档之后,将${NO_CACHE}替换为'${NO_CACHE}'"${NO_CACHE}",但无论哪种情况下都会出现相同的错误。我该如何将环境变量中的布尔值注入到Docker Compose字段中?
$ docker -v 
Docker version 20.10.17, build 100c701

1
不确定这样会不会起作用,但你是否也尝试过在 .env 文件中设置变量? - undefined
1
尝试过了,即使在 .env 文件中设置变量也不起作用。 - undefined
这个链接可能会有帮助:https://devops.stackexchange.com/questions/537/why-is-one-not-allowed-to-use-a-boolean-in-a-docker-compose-yml - undefined
确实,似乎在传递build.no_cache作为参数时出现了问题。像export变量或.env文件这样的解决方案在这里出现了某种原因无法工作(是否是个bug?)。请查看使用--build标志的替代解决方案建议。 - undefined
3个回答

2
如果问题是Docker Compose不支持从环境变量中注入布尔值(因为环境变量始终被视为字符串,用引号括起来),那么您可能需要一个包装脚本(用于包装docker compose up调用)。
为了进行测试,尝试编写一个shell脚本(run-docker.sh + chmod 755 run-docker.sh),读取环境变量,然后根据该变量的值在docker-compose.yml文件中设置no_cache选项。
然后,您可以使用docker-compose使用现在正确设置的no_cache选项构建您的服务。
#!/bin/bash

# Read the environment variable
NO_CACHE=${NO_CACHE:-false}

# Determine the value to set in the docker-compose file
if [ "$NO_CACHE" = "true" ]; then
  NO_CACHE_VALUE="true"
else
  NO_CACHE_VALUE="false"
fi

# Update the docker-compose file with the determined value
sed -i.bak -e "s/no_cache: .*/no_cache: $NO_CACHE_VALUE/" docker-compose.yml

# Run docker-compose up
docker compose up

# Restore the original docker-compose file
mv docker-compose.yml.bak docker-compose.yml

这个脚本假设你的docker-compose.yml文件中包含与正则表达式no_cache: .*匹配的行。如果你的文件结构不同,你需要调整sed命令。
然后使用以下命令调用它:
NO_CACHE=true ./run-docker.sh

1
替代方案-获得相同的结果-将其作为外部参数传递给docker-compose命令。
修改您的docker-compose.yaml文件并删除no_cache。
version: '3.8'

services:
  backend:
    build:
      context: .

为了强制执行镜像构建,请使用--build标志(docker compose up --build)。
如果您希望将其作为参数添加,可以这样做:
export CUSTOM_FLAGS="--build" # similar to NO_CACHE=true
export CUSTOM_FLAGS="" # similar to NO_CACHE=false

docker compose up $CUSTOM_FLAGS

0
设置环境变量:
export NO_CACHE=false

谢谢。我已经在我的Docker Compose命令中导出了它。如果我从命令中移除NO_CACHE=true,会收到关于缺少环境变量的警告。我还尝试明确地使用export NO_CACHE=true,但是收到相同的错误提示。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接