我正在一个ubuntu docker上运行一组命令,我需要设置一些环境变量使我的脚本能够正常工作。
我尝试了几种替代方案,但似乎都没有解决我的问题。
替代方案1: 使用--env或--env-file
在我的已经运行的容器中,我运行以下命令之一:
docker exec -it --env TESTVAR="some_path" ai_pipeline_new_image bash -c "echo $TESTVAR"
docker exec -it --env-file env_vars ai_pipeline_new_image bash -c "echo $TESTVAR"
env_vars的内容:
TESTVAR="some_path"
两种情况下输出为空。
替代方案2:使用Dockerfile
我使用以下Dockerfile创建我的镜像:
FROM ai_pipeline_yh
ENV TESTVAR "A_PATH"
通过这种方式,如果我附加到Docker上(也就是说,如果我运行交互式shell),则设置变量,但是如果我从主机运行
docker exec -it ai_pipeline_new_image bash -c“echo $ TESTVAR”
,则输出为空。有什么更好的方法吗?
编辑
事实证明,如果我从shell脚本检查变量的状态,则已设置,但是如果直接在
bash -c“echo $ VAR”
中检查它们,则未设置。我希望真的能够理解为什么会这样。我提供了一个最小的示例:运行docker
docker run -it --name ubuntu_env_vars ubuntu
创建一个文件,该文件回显容器内的VAR。
root@afdc8c494e8a:/# echo "echo \$VAR" > env_check.sh
root@afdc8c494e8a:/# chmod +x env_check.sh
从主机上运行:
docker exec -it -e VAR=BLA ubuntu_env_vars bash -c "echo $VAR"
(空输出)
从主机上运行以下命令:
docker exec -it -e VAR=BLA ubuntu_env_vars bash -c "/env_check.sh"
输出: BLA
为什么?????