Docker EXPOSE 使用运行时环境变量

标签 docker dockerfile

我的 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 中设置它们。只需使用 --exposedocker run 在运行时指定端口以及环境变量以获取详细信息:

https://docs.docker.com/engine/reference/run/#expose-incoming-ports

关于Docker EXPOSE 使用运行时环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178013/

相关文章:

apache - Dockerfile 找不到我的私有(private) ssh key

github - Docker:无法在运行时克隆内部的 github 私有(private) rebo

Docker Tomcat 用户配置不起作用

docker - RUN echo -e "deb http ... "准备了错误的目标文件内容

docker - 如何在一个 Istio 服务网格中托管多个应用程序?

python - 简单的 Python Docker 脚本

docker - 'docker restart'的明确行为是什么?

postgresql - 在docker中运行pgadmin4时CSRF token 错误请求

spring - 连接到本地主机 :5432 refused after docker run when port 5432 is clearly open and listening?

node.js - 移动 docker-compose.yml 文件时,Nginx 镜像的 docker-compose 不起作用