首页 > 解决方案 > 如何从容器中公开端口并从主机读取它

问题描述

我正在创建一个 docker 映像,我需要从我的容器中公开一个端口。构建映像时,我需要从变量文件(类似于 .env 文件)中读取端口。这是我的 Dockerfile

FROM ...

ENV PIP_CERT=...

USER root

#installing application source
COPY . /microservice


RUN cd /microservice &&\
  pwd &&\
  ls &&\
  echo "---> Installing dependencies..."

EXPOSE $PORT    

我怎样才能做到这一点?

标签: docker

解决方案


您不需要将此参数化。选择一个端口号——例如,你的语言框架的非特权 HTTP 服务的“默认”端口是什么——然后在 Dockerfile 中硬编码。如果操作员想要选择不同的端口来发布,他们会知道docker run -p选项的第二个数字需要是什么。

# Dockerfile
...
EXPOSE 8000
CMD ["myserver", "-addr=0.0.0.0:8000"]
# The second port number 8000 is a fixed property of the image
# The operator can pick any number for the published port
docker run -p 3333:8000 ...

您应该能够在多个环境中重新运行相同的图像;如果您需要重新构建映像以在其他地方运行它,请考虑尝试创建需要在运行时更改映像输入的属性,例如环境变量,而不是您在 Dockerfile 中修复的内容。


推荐阅读