Dockerfile 覆盖 ENV 变量
Posted
技术标签:
【中文标题】Dockerfile 覆盖 ENV 变量【英文标题】:Dockerfile Overriding ENV variable 【发布时间】:2017-03-13 02:20:38 【问题描述】:我有一个 Dockerfile,我想使用默认值配置 API。
来自社交引擎/nginx-spa
ENV API_URL 本地主机:6007
因此,当我运行此图像时,我将能够使用以下内容覆盖 localhost:6007:
docker run -e API_URL=production.com:6007 ui
这不起作用,我找不到有关如何执行此操作的明确说明。
有什么建议吗?
【问题讨论】:
【参考方案1】:您所描述的应该可以正常工作。给定:
$ 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
【讨论】:
感谢您的回复。但我认为这不是你给我的有效 docker 命令。它会尝试构建映像 ENV。 呃,什么?这些是完全有效的 docker 命令。请注意,两个示例中的图像名称都是ui
。这些是docker run
命令,它们不会构建任何东西。如果您输入错误,他们可能会尝试提取图像。
有趣,它没有用,但你的回答确实帮助我找出了我的问题。当我应该将它用作 CMD 时,我尝试在 RUN 部分中使用 ENV 变量。很抱歉这个模糊的问题。 +1 asciinema.org。以上是关于Dockerfile 覆盖 ENV 变量的主要内容,如果未能解决你的问题,请参考以下文章
Dockerfile:有没有办法从 .env 文件中读取变量
可以将来自docker-compose.yml的env变量传递给dockerfile吗?