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
- Docker / CI:访问在另一个阶段创build的nodeJS应用程序
- OpenJDK9(Docker),分级4.2.1,GitLab
- 清理githost托pipe的gitlab-ci运行器中晃来晃去的Docker容器?
- Gitlab CI中使用Docker runner的代理问题
- 如何使用GitLab CI设置Selenium E2Etesting?
- CI与Gitlab打破与java.lang.NoClassDefFoundError:com /谷歌/注射/ util /提供者
- 使用Gitlab CI自动添加索引docker服务的正确方法
- Gitlab CI Dockernetworking超时
- 将图层存储在gitlab ci docker执行程序中