在docker compose run命令中使用env变量

use*_*695 3 docker docker-compose

运行命令docker-compose run -e TYPE=result mongo_db_backup应该给我给定TYPE变量的值:

mongo_db_backup:
  image: 'mongo:3.4'
  volumes:
    - '/backup:/backup'
  command: sh -c '$$(echo $TYPE)'
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误The TYPE variable is not set. Defaulting to a blank string.我在做什么错

Olu*_*ule 6

碰巧Compose $TYPE在到达容器内部之前先膨胀。Compose $TYPE在shell或主机环境中寻找环境变量,并替换其值。

这将与以下终端命令一起使用:

docker-compose.yml

command: sh -c 'echo $TYPE'
Run Code Online (Sandbox Code Playgroud)

终端命令

TYPE='hello world' docker-compose run web
Run Code Online (Sandbox Code Playgroud)

$TYPE主机中没有环境变量时,Compose会将值设置$TYPE为空字符串并输出警告。

需要通知Compose不要扩展,$TYPE因为我们希望它在容器中运行的Shell内部扩展。

为此用途

docker-compose.yml

command: sh -c "echo $$TYPE"
Run Code Online (Sandbox Code Playgroud)

在美元符号前面进行$TYPE转义。

参考: