我正在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
我使用以下 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
為什么???????
uj5u.com熱心網友回復:
在運行時(應用程式啟動)設計驅動到環境變數的應用程式是一個不錯的選擇
不要在 docker build 階段使用 env 變數。
有時問題不是環境變數或docker,問題是讀取環境變數的應用程式。
無論如何,您可以使用以下選項在運行時將環境變數注入 docker 容器:
-e foo=bar
這是最基本的方法:
docker run -it -e foo=bar ubuntu

這些變數將在您的容器啟動后可用。
遠程變數
如果您需要傳遞多個變數,使用 -e 不是最好的方法。
或者,如果您不想使用 .env 檔案或任何型別的帶有變數的本地檔案,您應該:
- 準備您的應用程式以讀取環境變數
- 在 docker 入口點 bash 腳本中注入變數,從遠程變數管理器讀取它
- 在 shell 腳本中,您將獲得遠程變數并使用
source /foo/bar/variables.
如果您想使用這種方法來幫助您,請告訴我。
uj5u.com熱心網友回復:
我暴露了我的菜鳥。在這里回答我自己的問題:
兩種選擇,--env-file file還是-env foo=bar都可以。
我在測驗時忘記轉義$字符。因此,測驗變數是否存在的正確命令是:
docker exec -it my_docker bash -c "echo \$MYVAR"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/375315.html
