【问题标题】:Environment variables on docker container are not overridedocker 容器上的环境变量不会被覆盖
【发布时间】:2020-06-08 20:48:36
【问题描述】:

我是 Docker 的新手,我有一个在 docker 容器中运行的 Nextjs 应用程序。该应用程序使用一些环境变量与服务器通信。这就是问题出现的地方。出于某种原因,在运行容器并传递环境变量时,它们被创建好了。使用 docker inspect containerId 我可以看到正确的值。但是,在对服务器进行真正调用时,值(服务器 ID)是在构建时设置的值。

构建镜像并传递参数。假设 SERVER_API=127.1.2.3

docker build -t miTestImage --build-arg SERVER_API=$(SERVER_API) --rm --no-cache myNextjsApp/

通过运行以下命令,我可以看到设置了正确的值。

docker image inspect imageId

但是,当运行图像时

docker run -itd -e SERVER_API=http://127.0.3.9:4000 --name myContianerApp -p 5000:5000 --rm imageId

并向服务器发送请求,它使用旧值 (127.1.2.3) 而不是新值 (http://127.0.3.9:4000)

通过这样做:

docker inspect myContianerApp,

我可以看到正确添加的新值,但我不明白为什么应用程序没有使用。

我正在阅读这个article,他们有以下图表。我正在执行相同的步骤,但不适合我。我错过了什么吗?

非常感谢任何帮助/线索。

【问题讨论】:

  • 一般你传入--build-arg的东西会被编译成镜像;它们不一定在运行时被覆盖,而且它不是传递 URL 之类的东西的好地方。您可以编辑问题以包含您自己的有问题的代码吗?
  • 确实如此,而且 Nextjs 有一种特殊的方式来获取似乎在他们最近的提交中被破坏的 env 变量。

标签: docker docker-compose dockerfile next.js docker-registry


【解决方案1】:

这是一个工作示例:

FROM busybox
ARG SERVER="google.com"
ENV SERVER=${SERVER}
ENTRYPOINT "/bin/ash" "-c" "ping ${SERVER}"

然后:

docker build --tag=62270940 --file=./Dockerfile .

docker inspect 62270940 --format="{{.Config.Env}}"
[PATH=... SERVER=google.com]

docker run \
--interactive --tty  \
62270940
PING google.com (172.217.14.238): 56 data bytes
64 bytes from 172.217.14.238: seq=0 ttl=52 time=13.850 ms
64 bytes from 172.217.14.238: seq=1 ttl=52 time=11.494 ms

docker run \
--interactive --tty \
--env=SERVER="stackoverflow.com" \
62270940
PING stackoverflow.com (151.101.1.69): 56 data bytes
64 bytes from 151.101.1.69: seq=0 ttl=55 time=13.763 ms
64 bytes from 151.101.1.69: seq=1 ttl=55 time=13.800 ms
64 bytes from 151.101.1.69: seq=2 ttl=55 time=25.678 ms

【讨论】:

  • 感谢您的回答。该示例工作正常。但是,对于我的用例场景,我很难(经过这么多小时或研究)发现问题不在于 Docker。确实,它是 Nextjs 框架。他们从 env 变量中获取值的方式无法正常工作。 nextjs.org/docs/basic-features/…
  • 将此答案标记为一个好的答案,因为我面临的问题超出了 Docker 的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
相关资源
最近更新 更多