2016-10-24 42 views
2

使用docker run和一堆-e標誌甚至是.env似乎很麻煩。將所有主機環境變量傳遞給碼頭集裝箱的最簡單方法

有沒有什麼簡單的辦法只有所有主機ENV變量傳遞給搬運工容器

+1

這可能是一個可怕的想法。什麼是用例? – johnharris85

+0

不需要創建額外的文件來管理配置,因此需要更新每個人都需要一個新的環境變量 – user1686342

+1

您可以詳細說明嗎?如果你有這麼多(動態?)配置,可以看看像領事/領事模板等......? – johnharris85

回答

9

我與誰建議你實際上可能沒有想做什麼,你認爲你想做的評議同意。但是:

如果(a)您對具有特定前綴的環境變量感興趣,並且(b)您的變量不包含任何空格,則類似這樣的工作將會......在這裏,我將所有XDG_*變量泊塢窗容器:

$ docker run -it --rm --env-file <(env | grep XDG) alpine sh 
/# env | grep XDG 
XDG_SEAT=seat0 
XDG_SESSION_TYPE=x11 
XDG_SESSION_ID=2 
XDG_RUNTIME_DIR=/run/user/21937 
XDG_MENU_PREFIX=gnome- 
XDG_CURRENT_DESKTOP=GNOME 
XDG_SESSION_DESKTOP=gnome 
XDG_VTNR=2 

如果你真的想所有環境變量,你可能需要編寫一個能產生正確引用輸出(處理包含空格的變量)更小的包裝程序,並這會排除跨越多行的內容,如BASH_FUNC_*變量。然後你會用你的包裝代替前面例子中的env | grep ...

+0

是否指定了遵循最佳實踐的env文件? – user1686342

+0

我不確定如何回答這個問題,因爲我真的不知道你的用例。如果您有大量需要配置容器的環境變量,則環境文件對我來說似乎是一個好主意(而不是將它們全部放在命令行上)。或者使用docker撰寫來做類似的事情。但是,如果您正在設計自己的圖像,也有可能有更好的方式將任何必要的配置集成到容器中,而不是使用環境變量。 – larsks

+0

謝謝您花時間回答這個問題,即使這種做事方式不正確。這個答案允許我在容器中運行'docker-compose',同時保持在我的撰寫文件中使用環境變量注入的能力:'MY_VAR = derp docker-compose up' –

0

有兩種方法可以使用-e標誌:-e VAR = VALUE和-e VAR;如果VAR已經導出,那麼第二種格式將使用導出的值而不會使其公開可讀,另外您無需擔心會針對空格,引號等轉義VALUE。

因此,如果您真的想要通過在所有輸出變量到你的容器,試試這個:

docker run ... $(env | cut -f1 -d= | sed 's/^/-e /') ... 
相關問題