Docker常见问题汇总
1、docker启动报错,错误内容如图:

从上图可以看出,错误的大致意思就是打开文件数限制住了
首先我们查看本机设置的针对进程级别的打开文件数,可通过ulimit -n 或者查看limit.conf文件,如图:

再来查看下docker的服务文件中是否配置了打开文件限制,如图:

从上图看出,服务中配置了LimitNOFILE=infinity,infinity的值默认情况下为65536,超过了设置的进程级别的参数值65535,因此启动会报错,解决方案是修改docker服务中的这个参数值,将打开文件数以及打开进程数都设置为65535(limits.conf中设置了进程数最大也是65535,因此顺便改了,以免日后出问题),如图:

修改好了后可通过如下命令重新加载文件并重启服务,如下:
systemctl daemon-reload
systemctl restart docker
注意:如果在进程的启动服务文件中设置了LimitNOFILE这个参数,那么参数的值一定要小于在limits.conf中设置的值,如果大于,那么启动必然报错。
2、启动容器提示错误如下:
Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write /proc/self/attr/keycreate: permission denied\"": unknown
解决方案:关闭slinux即可
- 临时关闭:setenforce 0
- 永久关闭:vim /etc/selinux/config,修改enforcing为disabled
3、容器内部无网络:
创建容器后,容器内部无法ping通外面的网络,比如ping www.baidu.com不通,但是ping网关是可以的,也就是docker0地址是通的,此时可参考的解决方案为直接修改下docker0的地址,然后重启docker即可
默认情况下docker0的IP地址为172网段,如图:

修改/etc/docker/daemon.json文件,添加bip字段即可修改docker0地址,如图:

修改后的docker0地址,如图:

4、容器内配置/etc/hosts后重启失效
解决办法:容器如果是通过–net=host的主机模式来启动的,那么同步的是主机的hosts文件,因此如果想在容器中配置/etc/hosts,那么直接在宿主机配置/etc/hosts即可,容器启动后即可同步到里面
5、容器运行centos后,在内部只能Ping通ip,无法ping通域名?
解决办法:
firewall-cmd --zone=public --add-masquerade --permanent #允许防火墙伪装IP
firewall-cmd --reload #重启防火墙使之生效
systemctl restart docker #重启docker服务


