欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker in docker环境下, docker run -v 挂载目录无法获取对应的文件

程序员文章站 2022-03-03 09:05:35
...

docker in docker环境下, docker run -v 挂载目录无法获取对应的文件

概述

特征日志:

# docker run 执行脚本报错 docker run ... -v /data:/data -w /data bash -c start.sh
bash: ./start.sh: No such file or directory
Error: No such container: 0ab792cf1dade07399212cf1bb2a3639dbe54f716e3f1bd01a54b791f67e0e2c

docker in docker

docker in docker是通过将宿主机的 docker.sock 挂载至容器内,实现共享宿主机的docker daemon; 在容器中使用docker image、docker pull、 docker push 实际上使用的是宿主机的docker daemon.

原因

Jenkins CI中 使用 Docker 运行构建节点也是使用的是docker in docker 的原理,通过jenkins-cci:agent容器内调用宿主机的docker daemon实现CI构建,在CI的WorkSpace中的Job里,若有使用将当前的工作路径挂载至容器内运行的时候,实际上是将宿主机对应的路径挂载至容器内。此时如果 jenkins-cci 的 agent容器内的目录与宿主机的目录路径不一致时,会导致在Job的容器内无法找到想要的文件,可能是一个空目录(可在宿主机找到对应的路径)

解决

  • 1 修改正在运行的容器的volumn挂载设置

  • 2 将Jenkins workspace 挂载至宿主机(二者保持路径一致)