docker常见故障分析

docker run故障

oci runtime故障

报错信息如下:

docker: Error response from daemon: oci runtime error: container_linux.go:303: starting container process caused "process_linux.go:364: container init caused \"rootfs_linux.go:57: mounting \\\"mqueue\\\" to rootfs \\\"/var/lib/docker/5000.5000/overlay2/6e0e6256a06b2c6d283a285737f67257fa35190b43286d951c496f3bc0652d83/merged\\\" at \\\"/dev/mqueue\\\" caused \\\"operation not permitted\\\"\"".

主要报错信息:
mounting \“mqueue\” to rootfs \"/var/lib/docker/5000.5000/overlay2/6e0e6256a06b2c6d283a285737f67257fa35190b43286d951c496f3bc0652d83/merged\" at \"/dev/mqueue\" caused \“operation not permitted\”

报错原因分析:

在daemon.json配置文件中,开启了userns-remap的同时,还开启了selinux。

解决方法:

关闭selinux或者关闭userns-remap。
关闭userns-remap会导致所有镜像和容器都不在了(因为开启了userns-remap以后,容器和镜像的文件保存在/var/lib/docker/uid.gid文件夹中,没有开启userns-remap的容器和镜像文件保存在/var/lib/docker文件夹中)。因此,推荐关闭selinux。
"selinux-enabled": false

进一步的处理方案待验证。

docker push故障

复现方法:

  1. 配置daemon.json配置文件
{
	"insecure-registries": [
    	"[::1]:5000",
    	"172.17.0.1:5000",
    	"0.0.0.0/0",
    	"::/0"
  	],
  	"live-restore": true
}

  1. 拉取registry镜像
docker pull registry
  1. 给要推入仓库的镜像打标签。(这里以centos:latest镜像为例子)
docker tag centos:latest localhost:5000/centos
docker tag centos:latest 172.17.0.1:5000/centos
docker tag centos:latest 127.0.0.1:5000/centos
  1. 运行仓库容器
docker run -id --name registry-latest -p 5000:5000 -v /var/lib/docker/registry:/var/lib/registry registry:latest

-v 参数中,第一个/var/lib/registry表示主机侧的/var/lib/docker/registry目录。第二个/var/lib/registry表示容器的/var/lib/registry目录。
我们将镜像推送到registry容器中,registry容器默认会把推送来的镜像保存到容器中的/var/lib/registry目录下。
将主机侧的/var/lib/docker/registry目录挂载到容器内的/var/lib/registry目录上。

  1. 推送镜像
docker push localhost:5000/centos
docker push 172.17.0.1:5000/centos
docker push 127.0.0.1:5000/centos

自建registry随后docker push localhost报错EOF

docker push localhost报错。
而docker push 172.17.0.1:5000和127.0.0.1都没有报错。
报错信息如下:

[root@vm-62 ~]# docker push localhost:5000/centos
The push refers to a repository [localhost:5000/centos]
Put "http://localhost:5000/v1/repositories/centos/": EOF

报错原因分析:

docker 的localhost默认为0.0.0.0。可以通过docker ps查看registry容器可以看到。

[root@vm-62 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
19ae1c24f5be        registry:latest     "/entrypoint.sh /e..."   15 minutes ago      Up 15 minutes       0.0.0.0:5000->5000/tcp   registry-x86

是将主机侧的0.0.0.0:5000映射到了容器的5000。
所以localhost解析不出来。报错。

解决办法:

启动容器的时候指定映射ip为127.0.0.1。

docker run -id --name registry-latest -p 127.0.0.1:5000:5000 registry

然后再进行push localhost就不会报错了。(但是不能docker push 172了)

docker push localhost:5000/centos
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值