如何将docker容器端口发布到主机中的一个随机可用端口



我尝试了以下操作:

docker run --expose 8765 --publish-all -it nginx

但这也暴露了80和端口8765

[root@centos7]# docker port f4b608998815
80/tcp -> 0.0.0.0:49156
80/tcp -> :::49156
8765/tcp -> 0.0.0.0:49155
8765/tcp -> :::49155

如何在不指定位置的情况下将端口8765发布到主机中的一个随机可用端口?

nginx基本映像已经声明了EXPOSE 80,并且无法取消公开端口,因此,如果使用docker run -P--publish-all选项发布每个公开的端口,则它将始终与手动公开的端口一起发布。

您可以使用小写docker run -p选项,只使用一个端口号,将该端口发布到任意主机端口上:

docker run -p 8765 -d nginx

由于Docker容器内部不会有端口冲突,您可能只想使用默认的HTTP端口80,与标准的Nginx配置相匹配。--expose --publish-all组合几乎是docker run --expose的唯一实际效果,--port也可以得到同样的效果;您几乎从不需要docker run --expose选项。