我从官方的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 标志以发布所有公开的端口并映射它们 到高阶端口。