为什么可以';我不能从我的postgres Docker容器映射端口吗?

为什么可以';我不能从我的postgres Docker容器映射端口吗?,docker,dockerfile,Docker,Dockerfile,我已经根据posgres的官方图片创建了一个postgres容器。我正在尝试映射端口5432,以便可以从本地主机访问容器 如果通过Dockerfile公开端口,则不会发生映射。这是我的Dockerfile FROM postgres EXPOSE 5432:5432 当我构建映像并运行它时,下面是我运行docker ps时得到的结果,它在PORTS列5432/tcp 当我从Dockerfile中删除EXPOSE并构建此 FROM postgres 然后在命令行docker run-p543

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

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

FROM postgres

EXPOSE 5432:5432
当我构建映像并运行它时,下面是我运行
docker ps
时得到的结果,它在
PORTS
5432/tcp

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

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


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

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

docker run -P <container>
docker运行-P
EXPOSE本身并没有做任何事情。如报告中所述:

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

EXPOSE指令实际上并不发布端口。信息技术 作为构建文档的人员之间的文档类型 图像和运行容器的人员,关于哪些端口 打算出版的。在运行时实际发布端口 在容器中,使用docker run上的-p标志来发布和映射一个或多个 更多端口,或使用-P标志发布所有公开的端口并映射它们 到高阶端口

可能重复的