我是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,其中有下图。我正在执行相同的步骤,但不适用于我。我会错过什么吗?
任何帮助/线索都非常感谢。
答案 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