searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

记一次docker pull拉取镜像报错“unexpected EOF”的排查过程

2024-04-30 02:34:44
307
0

问题现象

pull镜像有些layer层一直处于Retrying,如下

1
2
3
4
5
6
7
8
6a56b4def9c4: Retrying in 11 seconds
731bcd9b962b: Download complete
b58cd78ec81d: Retrying in 11 seconds
eda07c7847c3: Download complete
40ab7eabb7a4: Download complete
08888a06c9d6: Retrying in 11 seconds
8bf737cac800: Waiting
246e4dcd850f: Waiting

超过重试次数后,提示“unexpected EOF”。

不能pull,但可以push,在push后的短暂时间内可以pull,过段时间又会出现同样错误

环境

私有镜像仓库服务端环境:docker-registry运行在nginx后端。

客户端:任意docker客户端

排查

排查了docker-registry服务相关日志,未发现有异样错误信息。折腾好一会未果后,查了nginx的error日志,发现问题所在,类似错误日志如下

1
[crit] 2341093#0: *278055 open() "/var/lib/nginx/tmp/proxy/5/33/0000069335" failed (13: Permission denied) while reading upstream

可以看出是nginx没有权限读取目录,查看目录信息

1
2
3
4
5
6
7
[root@10.202.33.201 ~]# ls -l /var/lib/nginx/tmp/
total 20
drwx------.  2 root root 4096 Mar 23 16:10 client_body
drwx------.  2 root root 4096 Jan 13 18:00 fastcgi
drwx------. 12 root root 4096 Feb 25 13:35 proxy
drwx------.  2 root root 4096 Jan 13 18:00 scgi
drwx------.  2 root root 4096 Jan 13 18:00 uwsgi

目录用户和用户组都是root,而nginx的worker进程是以nginx用户运行的,故没有权限操作相关目录。

那为啥nginx进程是以nginx用户运行的,创建的目录拥有者为何是root呢?一开始以为是nginx可能以前是root身份运行,后续改回nginx用户身份,但经测试验证,此情况不会出现问题。之后经过一系列排查,发现是因为该环境同时运行了多个nginx服务,其中有一个nginx服务是以root身份运行,这样相互作用于同个目录才导致问题的出现。

解决

可以是统一让所有nginx服务以相同的身份运行,如下

1
2
3
4
5
vim nginx.conf #在行首指定:user xxx;

rm -rf /var/lib/nginx/tmp/*

nginx -c /xxx/nginx.conf -s reload

或者既然是两个独立的nginx服务,就应该指定不同的主目录/var/lib/nginx

0条评论
作者已关闭评论
徐****煜
2文章数
0粉丝数
徐****煜
2 文章 | 0 粉丝
徐****煜
2文章数
0粉丝数
徐****煜
2 文章 | 0 粉丝
原创

记一次docker pull拉取镜像报错“unexpected EOF”的排查过程

2024-04-30 02:34:44
307
0

问题现象

pull镜像有些layer层一直处于Retrying,如下

1
2
3
4
5
6
7
8
6a56b4def9c4: Retrying in 11 seconds
731bcd9b962b: Download complete
b58cd78ec81d: Retrying in 11 seconds
eda07c7847c3: Download complete
40ab7eabb7a4: Download complete
08888a06c9d6: Retrying in 11 seconds
8bf737cac800: Waiting
246e4dcd850f: Waiting

超过重试次数后,提示“unexpected EOF”。

不能pull,但可以push,在push后的短暂时间内可以pull,过段时间又会出现同样错误

环境

私有镜像仓库服务端环境:docker-registry运行在nginx后端。

客户端:任意docker客户端

排查

排查了docker-registry服务相关日志,未发现有异样错误信息。折腾好一会未果后,查了nginx的error日志,发现问题所在,类似错误日志如下

1
[crit] 2341093#0: *278055 open() "/var/lib/nginx/tmp/proxy/5/33/0000069335" failed (13: Permission denied) while reading upstream

可以看出是nginx没有权限读取目录,查看目录信息

1
2
3
4
5
6
7
[root@10.202.33.201 ~]# ls -l /var/lib/nginx/tmp/
total 20
drwx------.  2 root root 4096 Mar 23 16:10 client_body
drwx------.  2 root root 4096 Jan 13 18:00 fastcgi
drwx------. 12 root root 4096 Feb 25 13:35 proxy
drwx------.  2 root root 4096 Jan 13 18:00 scgi
drwx------.  2 root root 4096 Jan 13 18:00 uwsgi

目录用户和用户组都是root,而nginx的worker进程是以nginx用户运行的,故没有权限操作相关目录。

那为啥nginx进程是以nginx用户运行的,创建的目录拥有者为何是root呢?一开始以为是nginx可能以前是root身份运行,后续改回nginx用户身份,但经测试验证,此情况不会出现问题。之后经过一系列排查,发现是因为该环境同时运行了多个nginx服务,其中有一个nginx服务是以root身份运行,这样相互作用于同个目录才导致问题的出现。

解决

可以是统一让所有nginx服务以相同的身份运行,如下

1
2
3
4
5
vim nginx.conf #在行首指定:user xxx;

rm -rf /var/lib/nginx/tmp/*

nginx -c /xxx/nginx.conf -s reload

或者既然是两个独立的nginx服务,就应该指定不同的主目录/var/lib/nginx

文章来自个人专栏
容器-Kubernetes
2 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0