我的 Dockerfile 为环境变量设置了一些默认值,然后公开了两个应该是提供的环境变量的端口:
FROM python:3.6.5-stretch
[ ... ]
ENV MY_SERVICE_PORT 8080
ENV MY_SERVICE_PORT_RPC 50051
[ ... ]
EXPOSE ${MY_SERVICE_PORT}
EXPOSE ${MY_SERVICE_PORT_RPC}
容器内的应用程序在启动容器时正确读取环境变量。如果我使用以下方式运行图像:
docker run -e "MY_SERVICE_PORT=80" -d -t image_tag
然后我使用 docker ps
:
0fb14e12d43d image_tag "/bin/sh -c 'python3…" 8080/tcp, 50051/tcp
如您所见,EXPOSE
使用了构建时环境变量(默认为 8080 和 50051)。如果我在容器终端内执行 set
,我会得到:
MY_SERVICE_PORT=80
MY_SERVICE_PORT_RPC=50051
如何确保 EXPOSE
仅设置为运行时环境变量?有可能吗?
最佳答案
如果您不确定暴露的端口是什么,请不要在 dockerfile 中设置它们。只需使用 --expose
和 docker run
在运行时指定端口以及环境变量以获取详细信息:
https://docs.docker.com/engine/reference/run/#expose-incoming-ports
关于Docker EXPOSE 使用运行时环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178013/