[docker]Docker 容器的网络访问(端口映射)

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
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1768317420

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值