你知道为什么 docker run 和 docker-compose run 中环境变量的行为处理方式不同吗?
在使用 docker-compose exec 命令运行 docker-compose 后查看容器时,我找不到运行命令“env”的已定义环境变量。
$ a="test hello" docker-compose run -d app
$ docker-compose exec app
/code env
# HOSTNAME=ce1b4934lkj
# HOME=/
我认为只要容器在运行,环境变量就可用。
使用 docker run 和 docker exec 运行相同的测试,我得到了预期的结果。
$ docker run --env a=tst --name alpy -dit alpine
$ docker exec -it alpy env
# a=tst
# HOME=/root
编辑
如果我使用 docker-compose run 语法,env 变量将写入容器。但我不明白为什么我在随后的 exec 命令中无法再看到这个环境变量。我在同一个容器中执行这个命令。
$ docker-compose run -e another=var -d app env
# /code env & exit
# another=var
$ docker-compose exec app
/code env
# HOSTNAME=ce1b4934lkj
# HOME=/