2016-12-27 53 views
1

我需要在運行的碼頭集裝器中設置環境變量。我已經意識到在創建容器時設置環境變量的方式。迄今爲止,我發現沒有可用的簡單方法來執行此操作,而docker正在計劃添加新版本1.13。在運行碼頭集合器中設置環境變量

但是,我發現有些人能夠管理它現在不適合我。我嘗試以下方法,但我 -

docker exec -it -u=root test /bin/bash -c "export port=8090" 

回聲不工作「出口端口= 8090」到/etc/bash.bashrc使用腳本,然後源它

docker exec -it test /bin/bash -c "source /etc/bash.bashrc" 

配置整個事情在一個腳本並從主機運行它也沒有工作。當從主機運行腳本時,除了「export port = 8090」或「source /etc/bash.bashrc」或「source /root/.bashrc」,所有其他命令成功執行。

任何人都可以解釋爲什麼從主機源文件不能在碼頭容器中工作,即使我設置用戶(「 - u = root」)?任何人都可以幫我解決這個問題嗎?當我從容器中獲取文件時,它完美地工作。但在我的情況下,我不得不

注意從主機做到這一點:,我使用的碼頭工人1.12,並試圖以上在Ubuntu:16.04和Ubuntu:14.04

+0

你怎麼知道ENV沒有設置?您是否嘗試過「docker exec -it mydocker bash」,然後嘗試在continer中使用:'printenv'?另外,我會嘗試首先使用第一條命令進入容器,然後設置env並運行源代碼。 – cen

+0

我轉到容器(/ bin/bash)並檢查環境變量以確定變量是否存在。我應該提到,在我的情況下,我無法進入容器內部來源文件。忘記提到從容器內部採購完美。我編輯了我的問題。 –

+0

你可以嘗試的另一件事是把命令放在一個bash文件中,用docker將文件複製到容器中,然後執行,或讓你的應用程序執行它。根據您的其他評論,找到一些其他配置腳本的方法可能是一個更好的主意。動態配置通常不是通過env vars完成的。 – cen

回答

-1

我找到一種方法來爲正在運行的容器提供環境變量。首先升級你的碼頭引擎。我正在使用V1.12.5。

創建一個環境變量 - 腳本

#!/bin/bash 

echo "export VAR1=VAL1 
export VAR2=VAL2" >> /etc/bash.bashrc 
source /etc/bash.bashrc 

現在啓動的容器。在這裏, '測試' 是容器名稱:

docker run -idt --name=test ubuntu 

你的腳本複製到容器:

docker cp script.sh test:/ 

運行腳本:

docker exec -it test /bin/bash -c "/script.sh" 

重新啓動容器:

docker restart test 

去容器她LL

docker exec -it test /bin/bash 

檢查變量

echo $VAR1 
0

如果你在運行過程碼頭工人,你正在試圖改變碼頭中的環境變量,所以正在運行的進程會動態改變 - 這是行不通的。進程的環境變量在啓動時進行設置。你可以看到here的方法來克服,但我不認爲這是正確的路要走。

相反,我有一個配置文件,該文件定期讀取(或偵聽)文件。而當你想改變配置改變文件。

如果這不是您的情況,請描述您的情況,以便我們能夠更好地爲您提供幫助。

+0

容器內沒有正在運行的進程。就我而言,我在創建容器時只知道部分環境變量。但是稍後我會在某些腳本中使用更多的環境變量,這些腳本將稍後從我的應用程序(運行在docker主機中)運行,以啓動容器內的所需進程。 –

+0

@zamansakib容器不能沒有進程運行。在你的例子中,你正在運行bash作爲進程。 – lvthillo

+0

@ lorenzvth7-你是對的。我實際上試圖說沒有正在使用我想要更新的環境變量的進程正在運行。感謝您指出了這一點 –