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

在Docker in Docker环境中,由于Jenkins CI使用docker run -v挂载工作目录,可能导致容器内无法找到宿主机上的文件。原因在于宿主机与容器的路径不一致。解决方案包括修改容器的卷挂载设置或在宿主机创建软链接同步工作区目录。
摘要由CSDN通过智能技术生成

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挂载设置

获取容器的存储位置

# docker ps
CONTAINER ID   IMAGE                                                                       COMMAND                  CREATED             STATUS         PORTS                                  NAMES
4d7516672349   coding-public-docker.pkg.coding.net/cci/agent-docker/jenkins-cci:agent-v4   "/sbin/tini -- /usr/…"   About an hour ago   Up 6 minutes   50000/tcp, 127.0.0.1:15740->8080/tcp   cci-jenkins


# docker inspect 4d7516672349 | grep Id -C3
[
    {
        "Id": "4d75166723499ff580f5e2f3bb5f11b9c23fd18ede04cec6bd7708c39c9d0e4d",
        "Created": "2021-03-09T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值