当前位置:   article > 正文

docker常见故障分析_error mounting

error mounting

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\\\"\"".
  • 1

主要报错信息:
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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 拉取registry镜像
docker pull registry
  • 1
  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
  • 2
  • 3
  1. 运行仓库容器
docker run -id --name registry-latest -p 5000:5000 -v /var/lib/docker/registry:/var/lib/registry registry:latest
  • 1

-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
  • 1
  • 2
  • 3

自建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
  • 1
  • 2
  • 3

报错原因分析:

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
  • 1
  • 2
  • 3

是将主机侧的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
  • 1

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

docker push localhost:5000/centos
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/934563
推荐阅读
相关标签
  

闽ICP备14008679号