如何将 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
选项。
我尝试执行以下操作:
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
选项。