“bind”类型的挂载配置无效:绑定挂载源路径不存在:/home/jenkins/.docker (Istio)

koz*_*zmo 9 jenkins docker jenkins-pipeline istio

我尝试构建istio1.6.0+)并收到错误:

\n
docker: Error response from daemon: invalid mount config for type "bind":\nbind mount source path does not exist: /home/jenkins/.docker\n
Run Code Online (Sandbox Code Playgroud)\n

其中slave包含.docker目录

\n
13:34:42 + ls -a /home/jenkins\n13:34:42 .\n13:34:42 ..\n13:34:42 agent\n13:34:42 .bash_logout\n13:34:42 .bash_profile\n13:34:42 .bashrc\n13:34:42 .cache\n13:34:42 .docker\n13:34:42 .gitconfig\n13:34:42 .jenkins\n13:34:42 .m2\n13:34:42 .npmrc\n13:34:42 .oracle_jre_usage\n13:34:42 postgresql-9.4.1212.jar\n13:34:42 .ssh\n13:34:42 workspace \n
Run Code Online (Sandbox Code Playgroud)\n

部分Istio脚本

\n
export CONDITIONAL_HOST_MOUNTS=${CONDITIONAL_HOST_MOUNTS:-}\nif [[ -d "${HOME}/.docker" ]]; then\n  CONDITIONAL_HOST_MOUNTS+="--mount type=bind,source=${HOME}/.docker,destination=/config/.docker,readonly "\nfi\n\n\n"${CONTAINER_CLI}" run  --rm \\\n    -u "${UID}:${DOCKER_GID}" \\\n    --sig-proxy=true \\\n    ${DOCKER_SOCKET_MOUNT:--v /var/run/docker.sock:/var/run/docker.sock} \\\n    -v /etc/passwd:/etc/passwd:ro \\\n    -v /etc/group:/etc/group:ro \\\n    $CONTAINER_OPTIONS \\\n    --env-file <(env | grep -v ${ENV_BLOCKLIST}) \\\n    -e IN_BUILD_CONTAINER=1 \\\n    -e TZ="${TIMEZONE:-$TZ}" \\\n    --mount "type=bind,source=${PWD},destination=/work" \\\n    --mount "type=volume,source=go,destination=/go" \\\n    --mount "type=volume,source=gocache,destination=/gocache" \\\n    ${CONDITIONAL_HOST_MOUNTS} \\\n    -w /work "${IMG}" "$@"\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

...您是否尝试使用 -v 而不是 --mount ,那么您有任何错误吗?

\n
\n

\xe2\x9d\x97\xef\xb8\x8f 我--mount改为-verror消失

\n
-v ${HOME}/.docker:/config/.docker \n
Run Code Online (Sandbox Code Playgroud)\n

jt9*_*t97 12

正如我在评论中提到的,这里的解决方法可能是使用

\n\n

-v

\n\n

代替

\n\n

--mount

\n\n

-v 和 --mount 行为之间的差异

\n\n

由于 -v 和 --volume 标志长期以来一直是 Docker 的一部分,因此它们的行为无法更改。这意味着 -v 和 --mount 之间有一种行为不同。

\n\n

如果您使用 -v 或 --volume 绑定挂载 Docker 主机上尚不存在的文件或目录,则-v 会为您创建端点。它始终创建为目录。

\n\n

如果您使用 --mount 绑定挂载 Docker 主机上尚不存在的文件或目录,Docker 不会自动为您创建它,而是会生成错误。

\n\n
\n\n

如果您使用 docker swarm 那么它在这里有详细记录

\n\n
\n

如果将主机路径绑定挂载到 service\xe2\x80\x99s 容器中,则该路径必须存在于每个 swarm 节点上。Docker 群模式调度程序可以在满足资源可用性要求并满足您指定的所有约束和放置首选项的任何计算机上调度容器。

\n
\n\n
\n\n

值得查看这个github 问题评论

\n