【发布时间】:2022-01-12 05:43:44
【问题描述】:
我在 ubuntu docker 上运行 set 组命令,我需要设置几个环境变量才能使我的脚本正常工作。
我尝试了几种替代方法,但似乎都没有解决我的问题。
备选方案 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
我使用以下 docker 文件创建我的图像
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 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
为什么???????
【问题讨论】:
-
#1 您是否需要将环境变量注入活动容器? #2 您是否可以选择重建图像并添加一些功能? #3 为什么
-e foo=bar参数对你不起作用? -
#1 我不需要注入它们。在我第一次运行容器(或在 docker 文件中)时设置它们并在之后使用它们会很好。 #2 是的,#3 我不知道为什么它不起作用。也许我输入错误?
标签: linux docker environment-variables virtual-environment