如何将容器上的端口映射到主机?
Posted
技术标签:
【中文标题】如何将容器上的端口映射到主机?【英文标题】:How do I map a port on a container to the host? 【发布时间】:2019-05-21 22:08:15 【问题描述】:我正在尝试运行由以下 Dockerfile 描述的容器:
FROM node:11.4.0
RUN npm install -g sh
RUN npm install -g json-server
WORKDIR /data
VOLUME /data
COPY db.json /data
CMD json-server --watch db.json --port 3001
并通过运行指定监听端口:
docker run -it -p 3001:3001 abelalejandro/json-server:final
容器似乎运行良好,json-server 告诉我它正在端口 3001 上服务我的请求,但在浏览 http://localhost:3001 时我无法获得任何乐趣
我是否在发布/公开端口时遗漏了什么?
【问题讨论】:
【参考方案1】:它绑定到localhost
而不是0.0.0.0
(任何主机)。
你可以通过设置来改变它:
CMD json-server --watch db.json --host 0.0.0.0 --port 3001
我假设您使用的是https://github.com/typicode/json-server。
【讨论】:
作为一个好的做法,我建议将 EXPOSE 指令添加到您的 Dockerfile 中,这将为运行容器的用户提供良好的文档。尝试使用/不使用 EXPOSE 指令构建图像并执行 docker image inspect abelalejandro/json-server:final 以查看附加到图像的更多元数据。以上是关于如何将容器上的端口映射到主机?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 AWS ECS 自动将我的容器的端口映射到主机(EC2)
如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?