为什么我不能从postgres Docker容器映射端口?

问题描述 投票:0回答:1

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

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

FROM postgres

EXPOSE 5432:5432

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

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

FROM postgres

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

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

docker dockerfile
1个回答
1
投票

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

docker run -P <container>

EXPOSE实际上并没有做任何事情。如Docker documentation中所述:

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

EXPOSE指令实际上不会发布端口。它在构建映像的人和运行容器的人之间起到一种文档的作用,关于哪些端口要发布。要在运行容器时实际发布端口,请在docker run上使用-p标志发布和映射一个或多个端口,或使用-P标志发布所有公开的端口并将它们映射到高阶端口。

© www.soinside.com 2019 - 2024. All rights reserved.