一次诡异的docker错误调试

代码吟游使
• 阅读 15285
源自小伙伴的求助,虽然没能定位到最终的原因,调试的过程也比较有意思

缘起

小伙伴求助我,同一个docker镜像在测试机器上可以运行,在阿里云上运行提示用户不存在。

在阿里云上运行提示如下:

# docker run --rm -it image:tag
docker: Error response from daemon: linux spec user: unable to find user www-data: no matching entries in passwd file.
ERRO[0000] error waiting for container: context canceled
  • 镜像名称统一使用image:tag代替,其实错误和镜像的关系不大
  • 从错误描述看:应该是在/etc/passwd中未能找到www-data这个用户,判断用户不存在

调试过程

换成用root启动,依然提示找不到用户

# docker run --rm -it --user root image:tag
docker: Error response from daemon: linux spec user: unable to find user root: no matching entries in passwd file.
  • 看来root也要在/etc/passwd里面找

换一种方式启动,错误提示变了

# docker run --rm -it --user $(id -u) image:tag
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"docker-php-entrypoint\": executable file not found in $PATH": unknown.
  • 看来镜像设置有entrypoint
  • 但是为什么找不到entrypoint

换一个entrypoint试试看

# docker run --rm -it --user $(id -u) --entrypoint 'ls' image:tag
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"ls\": executable file not found in $PATH": unknown.
  • ls也找不到?那用/bin/ls试试看

# docker run --rm -it --user $(id -u) --entrypoint '/bin/ls' image:tag
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/bin/ls\": stat /bin/ls: no such file or directory": unknown.
  • 这次错误提示换了,找不到/bin/ls
  • 怀疑是文件系统错误,整个/下的文件都找不到

/bin/ls挂载到容器内试试

# docker run --rm -it --user $(id -u) -v '/bin/ls':'/bin/ls' --entrypoint '/bin/ls' image:tag
standard_init_linux.go:190: exec user process caused "no such file or directory"
  • 基本可以确定是docker内文件系统挂了

山穷水尽

暂时没找到办法进一步的追踪。通过docker inspectdocker history均看不出镜像的异常。

通过docker logs也看不到容器启动中的其他错误。

柳暗花明

别的小伙伴帮忙找到了这个issue: Error response from daemon: OCI runtime create failed - when running a Node.js Docker image

虽然错误类型不太一致,发现我一直忘记查看docker daemon的日志!!!!

通过journalctl -fu docker.service查看错误日志,发现和issue中的错误一致。

... level=error msg="stream copy error: reading from a closed fifo"

可能是docker的一个未修复的BUG。

TODO

为何--user root时会查找passwd文件,--user $(id -u)可以跳过passwd文件

点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
Docker 国内仓库和镜像
Docker国内仓库和镜像由于网络原因,我们在pullImage的时候,从DockerHub上下载会很慢。。。所以,国内的Docker爱好者们就添加了一些国内的镜像(mirror),方便大家使用。1\.国内Docker仓库阿里云(https://www.osch
Stella981 Stella981
4年前
Linux CentOS使用yum安装Docker
Docker支持以下的CentOS版本:目前,CentOS仅发行版本中的内核支持Docker.Docker运行在CentOS7上,要求系统为64位、系统内核版本为3.10以上.Docker运行在CentOS6.5或更高的版本的CentOS上,要求系统为64位、系统内核版本为2.6.32431或者更高版本.Docker要求CentOS系统的内核
Stella981 Stella981
4年前
Docker + selenium + jenkins 并行跑自动化测试
背景目标:使用docker做UI自动化测试并在Jenkins运行调试环境:MocOS运行环境:Linuxubuntudocker涉及工具:docker,selenium,unittest,jenkins基本思路找一个适合做自动化的docker镜像,使用seleniumgrid远程执行selenium。镜像
Stella981 Stella981
4年前
Docker Compose安装
1.Docker社区开发了很多工具,用于对多个docker容器进行编配。编配的过程实际上就是管理运行在多个docker容器里面的应用,而这些docker容器可能运行在多个不同的宿主机上。2.DockerCompose是一个比较简单的docker容器的编配工具,以前的名称叫Fig,由Orchard团队开发的开源Docker编配工具,在2014年被Do
Stella981 Stella981
4年前
Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
原文:Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Falunchen%2Fp%2F10139356.html)转发请注明此文章作
Stella981 Stella981
4年前
Docker学习8
前言相信不少小伙伴之前在用docker运行jenkins容器构建的时候,发现没有python3环境遇到了不少麻烦,导致无法运行测试脚本,但不要紧,安装就好了。接下来我们说用docker运行jenkins 构建自动化测试脚本。一、jenkins新建项目1、createnewjobs:输入项目名称后,选择自由风格
Stella981 Stella981
4年前
Docker学习笔记
docker通过带环境安装来解决开发和运维之间的鸿沟问题,属于云计算方面的技术。也就是说安装的时候把原始环境一模一样地复制过来,开发人员利用Docker来消除协作代码时,“在我的机器上可以正常工作啊"的问题。一次构建,处处运行。dev本地测试完毕后,打包递交docker镜像,而运维则只装一个docker作为鲸鱼,将各个镜像放到鲸鱼背上作为独立的集装箱
Stella981 Stella981
4年前
Dockerfile 设置语言包
最近使用Hangfire的Dashboard, 在本地调试时,显示的是中文,但是通过docker在kubernetes上运行时,就显示成英文了,怀疑是docker运行环境中没有设计默认的语言包:我们通过命令kubectlgetpodsowide查看pod所在服务器ip在该服务器中通过命令:dockerps 查看dock
Stella981 Stella981
4年前
HyperLedger Fabric 错误记录
错误1:在阿里云机器上运行环境:signalSIGSEGV:segmentationviolationcode0x1addr0x63pc0x7fecd68ca259需要修改所有相关docker容器yaml文件,在environment中加入image:hyperledger/fabric
Stella981 Stella981
4年前
Docker Get Started IV
4\.Swarms介绍在前面的部分,你知道了如何写一个应用以及如何运行在生产环境中,然后将它变为一个服务,在同一个进程中将服务能力伸缩到原来的5倍。在本部分,你将在集群上部署一个应用,运行在多台机器上。通过将多个机器加入到docker化的集群中,多容器多机器的应用是可能的,这个docker化的集群被称为蜂群。理解
frp + Nginx实现内网穿透 配置多个子域名访问内部服务
缘起公司搬家,新家不能装专线,静态ip消失,改为动态IP了,这样内部服务器在外网就没法访问了,所幸我们有一台云服务器,有公网ip。这里只提示写这篇博客的原因,下面的操作是在我个人腾讯云服务器(带公网ip)和个人PC上测试使用,亲测通过。公司阿里云服务器是生
代码吟游使
代码吟游使
Lv1
沿着星河轨迹踏遍人间春秋。
文章
4
粉丝
0
获赞
0