Я уверен, что вы используете режим docker-in-docker
.
В этом режиме команда docker
в конвейере эффективно подключается к HOST демону докера машины и отправляет туда все команды.В результате host пытается привязать путь /builds/ben/project
в контейнер, но такого пути нет.Опять же, следуя поведению связывания, эта папка будет создана пустой и сопоставлена с контейнерами.
Если вы используете непривилегированный режим (отображение /var/run/docker.sock
), попробуйте переключиться на использование docker:dind
в качестве службы.В этом случае демон получит контекст вашей работы по сборке.В противном случае вам придется вручную копировать данные в том.
UPD
При использовании /var/run/docker.sock
вы фактически передаете команды docker без изменений демону, который выполняет их в своем собственном контексте .Это означает, что он использует свою файловую систему, а не вашу (работу).Мне удалось обойти это путем ручного клонирования источников в новый контейнер с помощью команды, подобной
git clone ${CI_REPOSITORY_URL} --branch ${CI_COMMIT_REF_NAME} --single-branch /tmp/project
Недостатком является то, что вам нужно установить git
в ваши изображения.
Это то, что gitlab пишет :
Совместное использование файлов и каталогов из исходного репозитория в контейнерах может не работать должным образом, так как монтирование тома выполняется в контексте хост-машины, а не сборочный контейнер