Во-первых, возникла проблема с самой командой docker run
:
docker run --volume source="$(pwd)/test",target="/test" our-docker # buggy
в качестве синтаксиса для установки bind-mount :
- либо
docker run -v "$PWD/test":"/test" our-docker
(-v
- краткая форма --volume
) - или
docker run --mount type=bind,source="$PWD/test",target="/test" our-docker
( Примечание: Выше я заменил "$(pwd)"
на специальную переменную оболочки "$PWD"
, которая предотвращает вращение еще одного процесса.)
Далее, вы не можете просто добавить строку /test/check.sh
после строки docker run
, потому что вам точно нужно выполните эту команду в контексте docker run
. С этой целью вы можете использовать шаблон, который я предложил в этом другом потоке SO: Как мне установить docker -credential-ecr-login в моем PATH, прежде чем что-либо еще в GitLab CI (который содержит подробности / замечания о set -e
, кавычках и экранировании в контексте этого шаблона).
Заключение
Точнее, не могли бы вы попробовать следующую адаптацию вашего .gitlab-ci.yml
? (Я добавил несколько ls
команд, которые должны помочь в отладке вашей конфигурации):
services:
- docker:dind
stages:
- build
- test
before_script:
- docker info
# Build the docker image
build:
image: docker:latest
services:
- docker:dind
before_script:
- docker login docker.example.com -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
only:
- master
script:
- docker build -t our-docker .
- docker save our-docker > our-docker.tar
artifacts:
paths:
- our-docker.tar
expire_in: 1 week
stage: build
test:
image: docker:latest
# note: use /bin/sh below as this image doesn't provide /bin/bash
only:
- master
script:
- docker load < our-docker.tar
- echo "$PWD"
- ls
- ls -Rhal test
- |
docker run --rm -v "$PWD/test":"/test" our-docker /bin/sh -c "
set -ex
ls -Rhal /test
/test/check.sh
"
stage: test