2016-10-30 106 views
7

我有一個Dockerfile,我希望使用默認值對API進行配置。Dockerfile重寫ENV變量

FROM socialengine/nginx的水療中心

ENV API_URL本地主機:6007

所以,當我運行這個形象我倒是要能夠覆蓋本地主機:6007有類似下面:

搬運工運行-e API_URL = production.com:6007 UI

這不起作用,我無法找到如何執行此操作的明確說明。

有什麼建議嗎?

回答

13

你所描述的應該工作得很好。鑑於:

$ cat Dockerfile 
FROM socialengine/nginx-spa 
ENV API_URL localhost:6007 
$ docker build -t ui . 
[...] 

考慮一下:

$ docker run -it --rm ui env | grep API_URL 
API_URL=localhost:6007 

相比:

$ docker run -it --rm -e API_URL='production:6007' ui env | grep API_URL 
API_URL=production:6007 

docker run命令行上傳遞一個-e VARNAME=varvalue將覆蓋默認在您的Dockerfile設置。

如果您看到不同的行爲,請更新您的問題,以準確顯示您正在運行的命令和相關輸出。

更新

下面是完整的例子,記錄您的觀賞樂趣:

https://asciinema.org/a/a5a2n3exlyh4jkii4k0ivvqmd

+0

感謝您的答覆。但我不認爲這是你給我的有效的碼頭指令。它試圖構建圖像ENV。 – Proximo

+0

呃,什麼?那些是完全有效的泊塢窗命令。請注意,這兩個示例中的圖像名稱都是'ui'。這些都是'碼頭運行'命令,它們不會構建任何東西。如果您輸錯某些內容,他們可能會嘗試拉取圖片。 – larsks

+1

有趣的是,它沒有奏效,但你的答案確實幫我弄清楚了我的問題。我嘗試在RUN部分使用ENV變量,當我將其用作CMD時。對於模糊的問題抱歉。 +1爲asciinema.org。 – Proximo