【发布时间】: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