为什么我无法从我的 postgres Docker 容器映射端口?



我从官方的posgres图像创建了一个postgres容器。 我正在尝试映射端口 5432,以便我可以从本地主机访问容器。

如果我通过Dockerfile公开端口,则映射不会发生。 这是我的Dockerfile

FROM postgres
EXPOSE 5432:5432

当我构建映像并运行它时,这是我运行时得到的,docker ps它在PORTS列中看到它5432/tcp

当我从Dockerfile中删除EXPOSE并构建此

FROM postgres

然后构建映像并在命令行上传递端口 docker run -p 5432:5432 -d postgres ,端口确实被映射。 当我运行docker ps时,我在PORTS列中看到0.0.0.0:5432->5432/tcp

我做错了什么? 如何以映射的方式公开Dockerfile中的端口?

如果要使用 EXPOSE 命令发布 Dockerfile 中定义的端口,可以使用 -P 标志:

docker run -P <container>

EXPOSE 本身实际上并不做任何事情。如 Docker 文档中所述:

EXPOSE 指令通知 Docker 容器侦听 运行时指定的网络端口。

暴露指令实际上并不发布端口。它 功能作为构建人员之间的一种文档类型 映像和运行容器的人员,关于哪些端口是 打算发布。在运行时实际发布端口 容器,在 docker run 上使用 -p 标志发布和映射一个或 更多端口,或 -P 标志以发布所有公开的端口并映射它们 到高阶端口。

最新更新