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

how to publish a docker container port to one of the random available port in the host

我尝试执行以下操作:

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 并且无法 un-expose 端口,因此如果您使用 docker run -P--publish-all 选项要发布每个暴露的端口,它将始终与您的 manually-exposed 端口一起发布。

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

docker run -p 8765 -d nginx

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