
[docker]Docker 容器的网络访问(端口映射)
p 10.0.0.100::53:udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口。-p ip:hostPort:containerPort 多个容器都想使用80端口。-p 81:80 -p 443:443 可以指定多个-p。docker run -d -p等于启动了两个nginx。-p ip::containerPort(随机端口)随机映射 do
·
docker0:172.17.0.1 nginx:172.17.0.2
指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort 多个容器都想使用80端口
-p ip::containerPort(随机端口)
-p hostPort:containerPort:udp
-p 10.0.0.100::53:udp 使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
-p 81:80 -p 443:443 可以指定多个-p
随机映射 docker run -P (随机端口)
通过iptables来实现的端口映射
1:单个容器使用80端口
启动一台nginx
[root@docker-01 ~]# docker run -itd nginx:latest
11f36d32c7f3595fb4908f123ffe4e3970d0ebc6fbe0359ab863692edc4541d4
[root@docker-01 ~]# docker exec -it bold_merkle /bin/bash
root@11f36d32c7f3:/# hostname -i
172.17.0.2
root@11f36d32c7f3:/# exit
[root@docker-01 ~]# curl -I 172.17.0.2
HTTP/1.1 200 OK
Server: nginx/1.17.9
Date: Sun, 22 Mar 2020 08:14:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 03 Mar 2020 14:32:47 GMT
Connection: keep-alive
ETag: "5e5e6a8f-264"
Accept-Ranges: bytes
当访问宿主机的80端口会默认转到容器的80端口
[root@docker-01 ~]# docker run -itd -p 80:80 nginx:latest
df264e2895f7ce9672a4468bc62a4c1a9f0cbb1f4de1b515c919b74289740c5c
[root@docker-01 ~]# iptables -t nat -L -n
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:80
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.3:80
2:多个容器使用80端口
docker run -d -p等于启动了两个nginx
[root@docker-01 ~]# docker rm -f `docker ps -a -q` #批量删除容易
[root@docker-01 ~]# ifconfig eth0:1 10.0.0.100/24 up
[root@docker-01 ~]# docker run -d -p 10.0.0.11:80:80 nginx:latest
[root@docker-01 ~]# docker run -d -p 10.0.0.100:80:80 nginx:latest
[root@docker-01 ~]# netstat -ntl #监听了两个80端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.0.0.100:80 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.11:80 0.0.0.0:* LISTEN
不加ip地址会随机分配地址进行监测
docker run -itd -p 8888:80 nginx:latest
3:随机分配端口
[root@docker-01 ~]# docker run -itd -p 10.0.0.11::80 nginx:latest
[root@docker-01 ~]# docker run -itd -p 10.0.0.11::80 nginx:latest
[root@docker-01 ~]# netstat -ntl|grep 10.0.0.11
tcp 0 0 10.0.0.11:32768 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.11:32769 0.0.0.0:* LISTEN
两个端口都可以访问
为什么随机端口是32768开始的?
[root@docker-01 ~]# sysctl -a|grep ipv4|grep rang
net.ipv4.ip_local_port_range = 32768 60999
4:随机映射
[root@docker-01 ~]# docker run -itd -P nginx:latest
[root@docker-01 ~]# docker run -itd -P nginx:latest
[root@docker-01 ~]# netstat -ntl
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp6 0 0 :::32770 :::* LISTEN
tcp6 0 0 :::32771 :::* LISTEN
更多推荐
所有评论(0)