docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
现在有如下两种方式导出端口:
启动容器的时候通过-P,-p或者–expose参数动态指定:
端口映射支持的格式
ip : host port : container port #指定宿主机ip、指定宿主机port、指定容器
ip :: container port #指定ip、指定容器port
host port : container port #指定宿主机port、指定容器port
1 | $docker run -P -it ubuntu /bin/bash |
以上指令会将容器暴露的所有端口,都随机映射到宿主机上(不推荐)
1 | docker run -P 80 -it ubuntu /bin/bash |
以上指令会将容器的80端口随机映射到宿主机的一个端口上
1 | docker run -p 8000:80 -it ubuntu /bin/bash |
以上指令会将容器的80端口映射到宿主机的8000端口上
1 | docker run -P 192.168.0.100::80 -it ubuntu /bin/bash |
以上指令会将容器的IP 192.168.0.100和80端口,映射到宿主机的8000端口
1 | docker run -p 1000-2000:1000-2000 -it ubuntu /bin/bash |
以上指令会将容器的1000-2000的所有端口,映射到宿主机端口1000-2000
1 | docker run --expose=1000-2000 -it ubuntu /bin/bash |
以上指令会将容器的1000-2000的所有端口,随机映射到宿主机端口上
在Dockerfile里面通过EXPOSE指令静态配置:
EXPOSE指令只是指定暴露容器内部端口,映射规则还需要在运行容器时通过-P参数指定
1 | # GET_IMAGE |
上述Dockerfile暴露了容器内的8080和22两个端口给宿主机。
运行容器时,通过增加-P参数,Docker会自动为用户创建端口映射规则,并且帮助避免端口映射的冲突,这两个端口会被随机映射到宿主机上的两个端口上,
1 | docker run -d -it -P --name container_name image_name |
EXPOSE指令也支持指定端口范围
1 | EXPOSE 7000-8000 |
查看指定容器端口映射配置:
示例:
1 | docker port container_ID ``#容器ID |