大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
一、容器为什么要做端口映射
1、查看宿主机的IP信息
2、docker容器的IP信息
下面面这一段这就是docker 的网络,我们可以看到它的网段是172.17.0.0段的。
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:b6:4b:f0:16 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:b6ff:fe4b:f016/64 scope link
valid_lft forever preferred_lft forever
我们进入到此容器中看一下IP地址
[root@linuxftp243 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d883dcdb5e kylemanna/openvpn "ovpn_run" 13 hours ago Up 13 hours 0.0.0.0:1194->1194/udp openvpn-server
[root@linuxftp243 ~]# docker exec -it 44d883dcdb5e /bin/bash
bash-5.0#
bash-5.0#
bash-5.0# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 192.168.255.1 peer 192.168.255.2/32 scope global tun0
valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
bash-5.0#
我们退出容器,来到宿主机来ping一下这个IP
结果是可以通的。我们换台局域网的其他机器再试试。
其他机器无法ping通。
3、结论docker的容器只能和宿主机通信
通过以上实验,我们可以发现docker的容器只有宿主机可以ping通。其他机器是无法ping通的。
二、指定端口映射
2、端口映射查看
我们可以通过以下命令查看
netstat -lntup
指定端口映射 docker 会自动增加一条iptables规则来实现端口映射。
iptables -t nat -L -n
上面如果不是很清楚,可以看下图
端口不能冲突,上面提示就是80端口已被占用。
2、端口映射的语法
-p 80:80
-p 192.168.0.243:80:80
-p 192.168.0.243::80 宿主机是随机端口映射容器80端口,两个冒号。随机成啥端口可以通过docker ps查看
以上未指定协议,默认都是TCP,如果是UDP就必须指定
-p 192.168.0.243::1194/udp 宿主机是随机端口,容器是1194,协议是udp
-p 81:80 -p
如果有多个容器都要使用同一个端口例如80端口,我们就可以利用一个网卡支持多个IP的方法实现.
作法可以参考这里:https://blog.csdn.net/libaineu2004/article/details/79214910
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183317.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...