2017-10-16 173 views
0

在Docker鏡像的編譯階段,我想爲每個後續的「RUN」命令自動設置一些環境變量。Docker Ubuntu環境變量

但是,我想從docker conatiner中設置這些變量,因爲設置它們取決於一些內部邏輯。

使用dockerfile「ENV」命令並不好,因爲它不能依賴於內部邏輯。 (它不能依賴在碼頭集裝箱內運行的命令)

通常(如果這不是碼頭)我會設置我的〜/ .profile文件。但是,docker不會在非交互式shell中加載此文件。

所以他們時刻我必須與運行每個搬運工人運行命令:

RUN bash -c "source ~/.profile && do_something_here" 

然而,這是非常繁瑣(和不潔的)時,我有這個,我想運行bash命令每次都重複。是否有其他的「配置文件」文件可以使用。

回答

0

我有類似的問題,找不到滿意的解決方案。我所做的是創建一個腳本來源變量,然後執行操作。然後,我會重寫Dockerfile中的RUN命令,以改爲使用該腳本。

就你而言,如果你需要運行多個命令,你可以創建一個包裝器來加載變量,運行命令給出的參數,並將該腳本包含在docker鏡像中。

0

,你可以嘗試設置ARG作爲ENV像Dockerfile, 這 ARG my_env ENV my_env=${my_env} 並通過了「my_env =督促」在集結ARGS,這樣就可以用於後續運行SET ENV命令 可以也可以使用env_file:選項在docker compose yml文件中,以便在部署堆棧的情況下

+0

我在我的問題中闡述了確定變量值的邏輯是在容器內運行的。因此,您的提議意味着我需要更改conainer內的dockerfile?我不認爲這是可能的... – eshalev

+0

上述方法是可能的,我已經使用它,如果你沒有任何邏輯來設置env變量,另一個方法,如果你有一個邏輯正在'CMD'執行腳本所以每次啓動容器時,腳本都會被執行,並且env會根據邏輯進行設置,例如運行一個tomcat應用程序使腳本像'#!/ bin/ash或者打開你的邏輯腳本&&/path/of/tomcat/catalina。 sh把這個腳本放在CMD中 – Vignajeth