2016-10-30 77 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