如何将容器上的端口映射到主机?

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 容器修改端口

Docker 端口映射问题

如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?

rancher构建容器时设置端口映射到主机上,为啥在主机上用lsof看不到端

Docker端口映射