资讯专栏INFORMATION COLUMN

一次诡异的docker错误调试

Jeff / 2541人阅读

摘要:源自小伙伴的求助,虽然没能定位到最终的原因,调试的过程也比较有意思缘起小伙伴求助我,同一个镜像在测试机器上可以运行,在阿里云上运行提示用户不存在。

源自小伙伴的求助,虽然没能定位到最终的原因,调试的过程也比较有意思
缘起

小伙伴求助我,同一个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文件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27778.html

相关文章

  • 关于 Lumen 无输出 HTTP 状态码为 500 诡异错误

    摘要:关于无输出错误最近接入支付宝支付时遇到一个问题,在做支付回调函数的时候我先是写了一个用来记录回调时的支付宝请求参数,但发现无论如何日志都没有任何记录,而且回调函数里面的东西也没用执行,于是我自己请求该回调地址,发现服务器上状态码为但是没有 关于LUMEN无输出500错误 最近接入支付宝支付时遇到一个问题,在做支付回调函数的时候我先是写了一个 Log::info(alipay_notif...

    dayday_up 评论0 收藏0
  • PHP 一个诡异加法算法研究

    摘要:然而实际上,这个结果反而是正确的。结论我认为出现这种诡异的结果应该算是的,同时,这也说明了此种问题不太容易被发现和暴露,这要求我们平常写代码的时候尽量使用常用的语法,和精干的语句,让代码和逻辑达到最佳的平衡点。 前言 之前我在面试的时候,遇到许多年轻人都声称自己精通php,有过许多项目经验等等。然而,当真正笔试的时候,我问到 $result=1; if(-1){ $result=2;...

    gekylin 评论0 收藏0
  • 浅谈docker

    摘要:另外一个原因是企业文化是否与运动一致,只有企业支持,才能更大地发挥的价值。最后一个原因就是安全性问题,对于这一层的安全的隔离还有待改进,才能进一步得到企业的认可。惠普刘艳凯认为,这也是需要在下一步中改进的一方面。 前言云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队...

    MoAir 评论0 收藏0
  • 浅谈docker

    摘要:另外一个原因是企业文化是否与运动一致,只有企业支持,才能更大地发挥的价值。最后一个原因就是安全性问题,对于这一层的安全的隔离还有待改进,才能进一步得到企业的认可。惠普刘艳凯认为,这也是需要在下一步中改进的一方面。 前言云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队...

    nidaye 评论0 收藏0

发表评论

0条评论

Jeff

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<