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吗?

我们可以在通过 dockerfile 构建 docker 映像的同时通过 cmd 行传递 ENV 变量吗?

Dockerfiles ENV和ARG的应用

Dockerfiles ENV和ARG的应用

DOCKER学习_012:Dockerfile配置指令详解