1、系统环境:
Ubuntu 18.04.1 LTS
Docker version 19.03.6
2、问题说明:
docker启动镜像后只监听ipv6,所以导致外网无法访问;用命令 netstat -nlp 查看端口信息:
root@VM-4-6-ubuntu:/# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 :::8083 :::* LISTEN -
这里 :::8083即表示ipv6监听;这里简要做一下IP地址表示说明:
IP地址表示,IP地址有两个部分组成,net-id和host-id,即网络号和主机号。
127.0.0.1
127.0.0.1属于{127,}集合中的一个,所有的网络号为127的地址都被称为环回地址,所以环回地址不等价于127.0.0.1,后者只是环回地址的一份子,是包含关系,环回地址loop back。
相比于127.0.0.1,localhost 具有更多的意义,localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为同一个是因为我们使用的大多数电脑上都将localhost指向了127.0.0.1这个地址。
0.0.0.0
服务器端,通过0.0.0.0匹配所有服务器IP,如果进程监听0.0.0.0那么客户端访问服务器任何一个可达IP都可以使用此进程。
个人电脑未配置IP时表示本机地址
路由器表示默认路由
127.0.0.1是个环回地址,是IP,并不表示“本机”,0.0.0.0才是真正表示网路中的本地。
例:服务端绑定端口的时候一般选择绑定到0.0.0.0,这样用户可以通过多个本服务器的IP进行访问。
实际:服务器有内外网IP,一般财务系统绑定内网IP仅内部访问,OA绑定0.0.0.0内外网均可访问。
::
全0的IPV6地址,和IPV4的0.0.0.0一样,表示匹配多个IPV6地址。
用双冒号“::”表示一组0或多组连续的0,但只能出现一次,每项数字前导的0可以省略,省略后前导数字仍是0则继续。
2、解决方法:
目标是把ipv6监听改成ipv4监听,即改成这样:
在服务器上禁用IPv6,方法如下:
vim /etc/default/grub
#增加参数名为GRUB_CMDLINE_LINUX的值,即 ipv6.disable=1
GRUB_CMDLINE_LINUX="ipv6.disable=1 ..."
grub-mkconfig -o /boot/grub/grub.cfg
reboot
重启完成后查看结果:
修改成功!