gpt4 book ai didi

docker - docker 中的 GitLab CI docker 无法创建卷

转载 作者:行者123 更新时间:2023-12-04 14:39:37 24 4
gpt4 key购买 nike

我在 docker 中使用 docker 来托管我的容器,因为它们通过管道工作。我从我的代码创建的容器设置为有一个卷来将 gcloud key 传递给容器。这在我的本地机器上完美运行,但在 gitlab-runner 上它没有正确链接。

从阅读这似乎是因为它将主机链接到我的容器,而不是将 dind 主机链接到我的容器。

如何将 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

最佳答案

背景

您的问题在于 DIND 在您的主机(或顶级 Docker 引擎)上运行所有容器,因此当您将目录挂载到 $CONTAINER_TEST_IMAGE 时(2nd level Docker) 这个镜像实际上通过挂载的套接字在你的主机上运行,​​因此容器正在你的 Docker 主机上寻找那个目录。

我在容器中安装测试时遇到了同样的问题,并通过链接容器之间的卷解决了这个问题。

解决方案

在你的情况下,我认为 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

关于docker - docker 中的 GitLab CI docker 无法创建卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com