因为工作需要,需要使用shinyproxy 配合docker 部署shiny app,成功运行shinyproxy之后,发现shiny页面无法访问,报Container did not respond in time
错误。
经过各种排查之后发现,是因为docker本身无法联网而导致的问题。
docker运行容器之后,在容器内无法ping通宿主机,宿主机也无法ping通容器,但容器之间可以相互ping通,说明是docker0网桥存在问题。
brctl show
docker0网桥 bridge id 为8000.0000000000,各种排查无果。
百度之后发现,这些人遇到的问题比较类似:
docker ping 不通 docker0_Docker问题之网桥8000.000000000000
Docker 容器不能ping通默认网关(172.17.0.1)
他们都采用了升级内核的方式解决,但网桥故障的具体原因没有讲清楚。
于是查看内核发现,当前系统为3.10.0.327
linux内核。
在同款Linux内核的云服务器上,Docker 启动时报br_netfilter
模块缺失的错误。
进一步分析发现,在3.10.0-327
linux内核中,br_netfilter
以build-in的方式编码在系统中,没法以独立的模块运行,从而导致docker启动异常。
这个问题似乎只能通过升级内核解决
centos7升级内核可以通过yum
命令实现
# 升级内核
sudo yum update kernel
# 查看已安装内核
rpm -qa | grep kernel
# 查看开机启动可选内核
sudo cat /boot/grub2/grub.cfg |grep menuentry
# 查看默认加载内核(升级之后,自动修改为最新内核)
sudo grub2-editenv list
重启系统,Docker0网桥正常,Docker联网正常。