Недопустимая конфигурация монтирования для типа «bind»: исходный путь монтирования bind не существует: /home/jenkins/.docker - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь построить istio с помощью Jenkins и получаю сообщение об ошибке:

docker: Error response from daemon: invalid mount config for type "bind":
bind mount source path does not exist: /home/jenkins/.docker

slave содержит .docker каталог:

13:34:42 + ls -a /home/jenkins
13:34:42 .
13:34:42 ..
13:34:42 agent
13:34:42 .bash_logout
13:34:42 .bash_profile
13:34:42 .bashrc
13:34:42 .cache
13:34:42 .docker
13:34:42 .gitconfig
13:34:42 .jenkins
13:34:42 .m2
13:34:42 .npmrc
13:34:42 .oracle_jre_usage
13:34:42 postgresql-9.4.1212.jar
13:34:42 .ssh
13:34:42 workspace 

части Istio script

export CONDITIONAL_HOST_MOUNTS=${CONDITIONAL_HOST_MOUNTS:-}
if [[ -d "${HOME}/.docker" ]]; then
  CONDITIONAL_HOST_MOUNTS+="--mount type=bind,source=${HOME}/.docker,destination=/config/.docker,readonly "
fi


"${CONTAINER_CLI}" run  --rm \
    -u "${UID}:${DOCKER_GID}" \
    --sig-proxy=true \
    ${DOCKER_SOCKET_MOUNT:--v /var/run/docker.sock:/var/run/docker.sock} \
    -v /etc/passwd:/etc/passwd:ro \
    -v /etc/group:/etc/group:ro \
    $CONTAINER_OPTIONS \
    --env-file <(env | grep -v ${ENV_BLOCKLIST}) \
    -e IN_BUILD_CONTAINER=1 \
    -e TZ="${TIMEZONE:-$TZ}" \
    --mount "type=bind,source=${PWD},destination=/work" \
    --mount "type=volume,source=go,destination=/go" \
    --mount "type=volume,source=gocache,destination=/gocache" \
    ${CONDITIONAL_HOST_MOUNTS} \
    -w /work "${IMG}" "$@"

... Вы пытались использовать -v вместо --mount, у вас есть ошибки?

Я изменил --mount на -v и error исчез

-v ${HOME}/.docker:/config/.docker 

1 Ответ

2 голосов
/ 20 апреля 2020

Как я уже упоминал в комментариях, здесь можно использовать

-v

вместо

--mount

Различия между поведением -v и --mount

Поскольку флаги -v и --volume долгое время были частью Docker, их поведение изменить нельзя. Это означает, что существует одно поведение, отличающееся между -v и --mount.

Если вы используете -v или --volume для привязки-монтирования файла или каталога, который еще не существует в Docker host, -v создает конечную точку для вас . Он всегда создается как каталог.

Если вы используете --mount для привязки-монтирования файла или каталога, который еще не существует на хосте Docker, Docker автоматически не создается это для вас, но выдает ошибку.


Если вы используете docker рой, то это хорошо задокументировано здесь

Если вы bind смонтировать путь хоста в контейнеры вашей службы, путь должен существовать на каждом узле роя. Планировщик режима роя Docker может планировать контейнеры на любом компьютере, который отвечает требованиям доступности ресурсов и удовлетворяет всем указанным ограничениям и предпочтениям размещения.


Стоит проверить этот комментарий к проблеме github .

...