docker - 如何从容器中公开端口并从主机读取它
问题描述
我正在创建一个 docker 映像,我需要从我的容器中公开一个端口。构建映像时,我需要从变量文件(类似于 .env 文件)中读取端口。这是我的 Dockerfile
FROM ...
ENV PIP_CERT=...
USER root
#installing application source
COPY . /microservice
RUN cd /microservice &&\
pwd &&\
ls &&\
echo "---> Installing dependencies..."
EXPOSE $PORT
我怎样才能做到这一点?
解决方案
您不需要将此参数化。选择一个端口号——例如,你的语言框架的非特权 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 中修复的内容。
推荐阅读
- c# - 将内容和图像从 Umbraco 导出为 JSON 或 XML?
- google-cloud-platform - GCP 无法创建多地区托管实例组
- javascript - 如何将 PHP 变量插入到存储在 JS 变量中的 HTML 中?
- css - Internet Explorer 11 中的 Div 大小不起作用
- reactjs - 由于调用 axios,无法用玩笑测试 React 组件
- android - 某些 Android 设备的浏览器中的字体大小不规则
- r - 带有原生 R 对象的 SQL 语句
- kotlin - 从 Dart 向 Kotlin 发送回调函数
- python - 如何在 macOS 中使用下载的 Python 包?
- java - Jasper 报告 - 数字格式问题