docker容器上的环境变量不被覆盖

docker容器上的环境变量不被覆盖,docker,docker-compose,dockerfile,next.js,docker-registry,Docker,Docker Compose,Dockerfile,Next.js,Docker Registry,我是Docker的新手,我有一个运行在Docker容器中的Nextjs应用程序。应用程序使用一些环境变量与服务器通信。这就是问题所在。出于某种原因,当运行容器并传递env变量时,它们被创建为OK。使用docker inspect Containered我可以看到正确的值。但是,在真正调用服务器时,值(服务器id)是在构建中设置的值 构建映像并传递参数。假设服务器API=127.1.2.3 docker build -t miTestImage --build-arg SERVER_API=$(S

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

构建映像并传递参数。假设服务器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),而不是新值()

通过这样做:

docker inspect myContianerApp,
我可以看到新的价值得到了适当的增加,但我不明白为什么应用程序没有收到新的价值

我正在读这篇文章,他们有下面的图表。我正在做同样的步骤,但不是为我工作。我错过什么了吗

非常感谢任何帮助/线索


以下是一个工作示例:

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]
码头工人赛跑\
--交互式--tty\
62270940
PING google.com(172.217.14.238):56个数据字节
172.217.14.238中的64字节:seq=0 ttl=52时间=13.850毫秒
172.217.14.238中的64字节:seq=1 ttl=52 time=11.494 ms
码头工人赛跑\
--交互式--tty\
--env=SERVER=“stackoverflow.com”\
62270940
PING stackoverflow.com(151.101.1.69):56个数据字节
151.101.1.69中的64字节:seq=0 ttl=55时间=13.763毫秒
151.101.1.69中的64字节:seq=1 ttl=55时间=13.800毫秒
151.101.1.69中的64字节:seq=2 ttl=55时间=25.678毫秒

以下是一个工作示例:

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]
码头工人赛跑\
--交互式--tty\
62270940
PING google.com(172.217.14.238):56个数据字节
172.217.14.238中的64字节:seq=0 ttl=52时间=13.850毫秒
172.217.14.238中的64字节:seq=1 ttl=52 time=11.494 ms
码头工人赛跑\
--交互式--tty\
--env=SERVER=“stackoverflow.com”\
62270940
PING stackoverflow.com(151.101.1.69):56个数据字节
151.101.1.69中的64字节:seq=0 ttl=55时间=13.763毫秒
151.101.1.69中的64字节:seq=1 ttl=55时间=13.800毫秒
151.101.1.69中的64字节:seq=2 ttl=55时间=25.678毫秒

通常,您在
--build arg中传递的内容会被编译到图像中;它们不一定在运行时被覆盖,而且它也不是传递URL之类内容的好地方。你能编辑这个问题以包含你自己的有问题的代码吗?事实上,就是这样,加上Nextjs有一种特殊的方法来提取在最近的提交中被破坏的环境变量。通常你在
--build arg
中传递的东西会被编译到图像中;它们不一定在运行时被覆盖,而且它也不是传递URL之类内容的好地方。你能编辑这个问题来包含你自己的代码吗?事实上,就是这样,加上Nextjs有一种特殊的方法来提取在最近的提交中被破坏的环境变量。谢谢你的回答。这个例子很好用。然而,对于我的用例场景,我很难(经过这么多小时或研究之后)发现问题不是Docker。事实上,这是Nextjs框架。他们从env变量中获取值的方式工作不正常。因为我面临的问题超出了Docker的范围,所以将此答案标记为好答案。谢谢您的回答。这个例子很好用。然而,对于我的用例场景,我很难(经过这么多小时或研究之后)发现问题不是Docker。事实上,这是Nextjs框架。他们从env变量中获取值的方式工作不正常。因为我面临的问题超出了Docker的范围,所以我认为这个答案是好的。