docker中的GitLab CI泊坞窗不能创build卷

我在Docker中使用docker来托pipe我的容器,因为他们通过pipe道工作。 我从我的代码创build的容器设置为有一个容量传递到容器gcloud密钥。 这在我的本地机器上完美工作,但在gitlab运行器上它没有正确链接。

从阅读这看起来是因为它将主机链接到我的容器,而不是主机到我的容器。

如何将dind内部的目录链接到我的容器?

(也可以忽略标签等小问题,这个ci文件在开发的时候是很早的)

下面的GitLab ci

image: docker:latest services: - docker:dind variables: DOCKER_DRIVER: overlay2 SPRING_PROFILES_ACTIVE: gitlab-ci CONTAINER_TEST_IMAGE: registry.gitlab.com/fdsa CONTAINER_RELEASE_IMAGE: registry.gitlab.com/asdf stages: - build_test_image - deploy .docker_login: &docker_login | # This is an anchor docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com build test image: stage: build_test_image script: - *docker_login - docker build -t $CONTAINER_TEST_IMAGE . - docker push $CONTAINER_TEST_IMAGE test run: stage: deploy script: - *docker_login - mkdir /key - echo $GCP_SVC_KEY > /key/application_default_credentials.json # BROKEN LINE HERE - docker run --rm -v "/key:/.config/gcloud/" $CONTAINER_TEST_IMAGE tags: - docker 

背景

你的问题在于,在你的主机(或者顶层Docker引擎)上运行所有容器的时候,所以当你将一个目录挂载到你的$CONTAINER_TEST_IMAGE (第二级Docker)时,这个镜像实际上是通过安装的套接字在主机上运行的,因此该容器正在您的Docker主机上查找该目录。

我已经有相同的问题在容器中安装testing,并通过连接容器之间的容量来解决这个问题。

在你的情况下,我认为/key/application_default_credentials.json docker cp命令可以解决你需要将/key/application_default_credentials.json文件复制到容器。

就像是:

 - docker run --name="myContainer" -d $CONTAINER_TEST_IMAGE - docker cp /key/application_default_credentials.json myContainer::/.config/gcloud/application_default_credentials.json - docker exec -it myContainer 'run_tests_or_whatever_command' - docker rm -f myContainer 

另一个解决scheme是完全有效的,但我想分享我的解决scheme:

显然,dind会挂载/ build目录,这样子容器可以“看见”它的内容。 所以通过将键放在"./"可以看到这些容器。 我使用$(pwd)因为docker运行不接受~.

 test run: stage: deploy script: - *docker_login - mkdir ./key - echo $GCP_SVC_KEY > ./key/application_default_credentials.json - docker run --rm -v "$(pwd)/key:/.config/gcloud/" $CONTAINER_TEST_IMAGE tags: - docker