Docker使用错误小结

网络

1、docker端口映射到宿主机后外网无法访问(防火墙已关闭) 解决方法:

#启用IP路由转发功能:
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
#以上两种方法都可能立即开启路由功能,但如果系统重启,或重启网卡所设置的值即会丢失。

#如果想永久保留配置,可以修改/etc/sysctl.conf文件
[root@localhost ~]# vi /etc/sysctl.conf
或者
[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1

重新加载系统参数
[root@localhost ~]# sysctl -p


查看是否修改成功
[root@localhost ~]# sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示成功了

2、 windows宿主机无法ping通vmware中安装的docker 截图为vmware中ip地址,centos7虚拟机(192.168.110.128),docker网段(10.10.100.0)

现象:
  • centos7虚拟机ip可以与上面安装的docker网段互通;
  • docker网段内容器可以ping通windows宿主机;
  • windows宿主机无法ping通docker网段;

解决方法: 手动在windows宿主机上添加一条路由策略

route add 10.10.100.0 MASK 255.255.255.0 192.168.110.128

使用

1、 使用systemctl命令报错

最近使用docker运行ubuntu16.04镜像,进入镜像后使用systemctl命令后发现报错,报错如下:

Failed to connect to bus: No such file or directory

解决方法

#创建容器:
docker run -itd --name=容器名称 --privileged=true 镜像名称 /usr/sbin/init

#进入容器:
docker exec -it 容器名称 /bin/bash

出现新的问题

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"/sbin/ionit\": stat /sbin/ionit: no such file or directory": unknown

最终答案 看报错信息应该是不存在/usr/sbin/init/这个文件。 原因是上面的解决方法只适用于Centos系统,而我容器里面跑的是Ubuntu系统,Ubuntu里面的systemd文件名实际路径为/sbin/init。 所以解决方法如下:

创建容器:
docker run -itd --name=容器名称 --privileged=true 镜像名称 /sbin/init
进入容器:
docker exec -it 容器名称 /bin/bash

2、 Error response from daemon: driver failed programming external connectivity on endpoint pensive_panini 现象:

[root@bogon ~]# sudo docker run -d --restart=always -p 80:80 rancher/server
9d918ae01d60dc5ad749f98cc93fc144231051c7f8ab7a32d873ab6b3157fd38
docker: Error response from daemon: driver failed programming external connectivity on endpoint pensive_panini (fb0be019dff5a5824452718fa556c5d8264e76a2addacadbaf1b8fc23cae2855):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT --to-destination 10.10.100.2:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

解决方法:

  • docker服务启动时定义的自定义链DOCKER由于某种原因被清掉
  • 重启docker服务及可重新生成自定义链DOCKER
    [root@bogon ~]# systemctl restart docker
    [root@bogon ~]# docker container restart 9d918

安装软件

1、centos7解决 docker Failed to get D-Bus connection 报错 在docker容器里面安装mysql数据库,以下为安装mysql的命令:

yum -y install mariadb*
systemctl start mariadb.service    # 运行到这条报错  
systemctl enable mariadb.service

解决方法: 这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报类似权限错误。OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error) 将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。 然后就可以使用systemctl了。命令如下:

#在创建docker容器时添加--privileged
docker run --privileged  -tid --name "webserver" --mount source=my-vol,target=/webapp training/webapp  /usr/sbin/init
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值