2016-07-24 67 views
1

我跑碼頭工人,容器下面的命令:訪問環境變量來自上司的子進程運行

docker run -it -e CustomEnvVariable="val123" -p 80:80 imagename 

圖像具有supervisor與我的應用程序下面的conf文件運行:

[program:myapp] 
command=/usr/bin/dotnet /root/myapp/myapp.dll 
directory=/root/myapp/ 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/myapp.err.log 
stdout_logfile=/var/log/myapp.out.log 
environment=ASPNETCORE__ENVIRONMENT=Production 
stopsignal=INT 
user=root 

管理員啓動後,如何從myapp中訪問CustomEnvVariable

我試圖在conf文件environment值以下值:

environment=ASPNETCORE__ENVIRONMENT=Production,CustomEnvVariable=%(ENV_CustomEnvVariable)s 

但在重新啓動的主管時,我會收到此錯誤:

Restarting supervisor: Error: 
Format string 'ASPNETCORE__ENVIRONMENT=Production,CustomEnvVariable="%(ENV_CustomEnvVariable)s"' 
for 'environment' contains names which cannot be expanded 

一些更多的信息:

使用監督員版本:3.0(通過apt-get install supervisor -y安裝)。

我確認CustomEnvVariable的值是通過檢查echo $CustomEnvVariable的輸出達到容器的。

我做了所有的環境變量可從應用程序快速掃描,這裏的結果:

{ 
    "LC_ADDRESS": "", 
    "SUPERVISOR_PROCESS_NAME": "myapp", 
    "LC_MONETARY": "", 
    "LC_MESSAGES": "", 
    "LC_NAME": "", 
    "SUPERVISOR_ENABLED": "1", 
    "SUPERVISOR_SERVER_URL": "unix:///var/run/supervisor.sock", 
    "LC_COLLATE": "", 
    "ASPNETCORE__ENVIRONMENT": "Production", 
    "SUPERVISOR_GROUP_NAME": "myapp", 
    "LANG": "", 
    "LC_NUMERIC": "", 
    "LANGUAGE": "", 
    "LC_PAPER": "", 
    "LC_IDENTIFICATION": "", 
    "LC_CTYPE": "", 
    "LC_MEASUREMENT": "", 
    "TERM": "xterm", 
    "LC_TIME": "", 
    "LC_ALL": "", 
    "PATH": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", 
    "LC_TELEPHONE": "", 
    "PWD": "/" 
} 
+0

你是否檢查過它是否被設置/傳入(通過回顯它?)。也可以嘗試單引號,而不是在「碼頭運行...」上加倍。 – johnharris85

+0

確認當我在容器中運行bash時,當執行'echo $ CustomEnvVariable'時,通過'docker run -e'獲取傳入的值。所以它肯定會進入容器。 – Omar

+0

什麼版本的主管? – johnharris85

回答

1

的語法是正確的,但環境的展開僅僅是版本> 3.2監督員可用, as per this github issue

+1

僅供參考,在進一步使用時,似乎環境變量可由子進程訪問__without__不得不按照我的答案中所述進行變量擴展。 – Omar