不会覆盖Docker容器上的环境变量

时间:2020-06-08 20:48:36

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

我是Docker的新手,并且在Docker容器中运行了Nextjs应用程序。该应用程序使用了一些环境变量来与服务器通信。这是出现问题的地方。出于某种原因,在运行容器并传递env变量时,会创建它们。使用 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,其中有下图。我正在执行相同的步骤,但不适用于我。我会错过什么吗?

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

enter image description here

1 个答案:

答案 0 :(得分:2)

这是一个可行的示例:

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