EXPOSE 8090
语法 :EXPOSE <端口1> [<端口2>…]
上代码是 Dockerfile 中来声明端口的命令。首先,应该明确的一点,EXPOSE 命令只是声明了容器应该打开的端口并没有实际上将它打开。也就是说,如果不用 -p 或者 -P 中指定要映射的端口,容器是不会映射端口出去,不会通过宿主机被访问到。
从而得出结论是没有办法在 Dockerfile 里面进行端口映射的。
和 dockerfile 中 EXPOSE 暴露端口一样,docker run --expose 命令也是达到次效果,都是将端口暴露,但这个暴露的端口不依赖宿主机。
默认情况下,无法通过这些端口访问宿主机,也就是没有与宿主机的网络建立网络映射。
写在 Dockerfile 中进行声明,可以让让运维人员或者后来者知道我们开启了容器的哪些端口。
声明 EXPOSE 端口之后,使用 -P 命令进行随机映射的时候,是会对这个端口进行映射。
将容器的端口映射到宿主机的随机端口。使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。容器内部端口会取去 dockerfile EXPOSE 暴露的端口。
将容器的端口映射到宿主机的制定端口。通过 -p 发布端口,可以与宿主机网络建立映射,也就是可以通过宿主机的网络访问到 docker 容器。
docker run -p 6000 imagename
这种方式的好处是,宿主机自主分配未占用的端口,防止手动指定端口,绑定端口已经被占用的情况。
docker run -p 3000:6000 imagename