Docker启动容器出现No Such File Or Directory排查

kyaa111 1年前 ⋅ 578 阅读

dockerfile如下

FROM alpine
ADD test-backend /test-backend
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
EXPOSE 7099
CMD ["./test-backend", "pro"]

使用docker run创建容器后 启动失败

分享一下排查思路

  1. 由于容器秒退 所以docker exec 比较难操作

  2. dockerfileCMD改为如下项

    CMD ["wget", "www.google.com"]
    
  3. 使用国内网络的特性使容器在相当一段时间内持续运行, 这样就不会出现容器秒退的情况了

  4. docker exec -it test-backend /bin/sh

  5. 进入容器后查看对应目录/文件是否存在

  6. 手动执行之前dockerfile里的CMD, /test-backend pro, 然后报错了 no such file ....

  7. 在宿主机是可以运行这个程序的, 所以初步判断为docker基础镜像的问题, 将基础镜像更换为centos:7后重新docker builddocker run

  8. 网上有资料说alpine这个镜像虽然小, 但存在很多问题, 比如shell环境不完整等等

  9. 问题解决

还可以使用docker cpdocker export命令, 复制和导出在容器退出的情况下都是可以使用的

谨慎选择基础镜像 越小的镜像缺失的工具越多, 可能存在的问题包括但不限于

  1. shell环境不完整, 表现为可执行文件执行不了

  2. ssl等基础库不存在, 无法访问https服务

  3. 常用的时区设置方式失效