我试图找到需要添加到自托管gitlab-runner
的设置,以实现以下目的:在包含dir/script.py
的存储库中,我正在运行
services:
- docker:dind
main:
image: docker:latest
script:
- docker run -i -v $(pwd)/dir:/mnt python:3 ls -la /mnt
使用GitLab共享运行程序显示dir/script.py
已成功安装到容器中,并以/mnt/script.py
的形式出现。
如果我使用自托管的gitlab-runner
,则该目录为空。我尝试在--privileged
的{{1}}和docker run
的运行器配置中添加.gitlab.yml
。
我非常确定容器中的挂载目录为空,因为mount path refers to the path on the host(另请参见Docker in Docker cannot mount volume)。但是,GitLab的共享跑步者似乎有一种应对方式,我想找到这种方式并将其用于我的自托管跑步者。
我正在运行/etc/gitlab-runner/config.toml
,并通过运行gitlab-runner
单元来提供Docker-in-Docker
systemd
(提取)并添加
[Service]
Type=simple
ExecStartPre=/usr/bin/docker network create --subnet 172.25.0.0/16 gitlab-runner-net
ExecStartPre=/usr/bin/docker run -d --name gitlab-dind --privileged --restart always --network gitlab-runner-net -v /var/lib/docker -e DOCKER_TLS_CERTDIR= docker:19.03-dind --storage-driver=overlay2
ExecStartPre=/usr/bin/docker pull gitlab/gitlab-runner:latest
ExecStart=/usr/bin/docker run --name gitlab-runner --restart always --network gitlab-runner-net --dns 8.8.8.8 -v /srv/gitlab-runner/config:/etc/gitlab-runner -e DOCKER_HOST=tcp://gitlab-dind:2375 gitlab/gitlab-runner:latest
ExecStop=/usr/bin/docker stop gitlab-runner
ExecStop=/usr/bin/docker stop gitlab-dind
ExecStop=/usr/bin/docker rm gitlab-runner
ExecStop=/usr/bin/docker rm gitlab-dind
ExecStop=/usr/bin/docker network rm gitlab-runner-net
host = "tcp://gitlab-dind:2375"
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
extra_hosts = ["gitlab-dind:172.25.0.2"]
的每个运行器部分。这是受https://medium.com/@tonywooster/docker-in-docker-in-gitlab-runners-220caeb708ca的启发。该设置允许在config.toml
内部使用docker build
并在两次构建之间共享Docker缓存。
How do I mount a volume in a docker container in .gitlab-ci.yml?建议使用工件,因为我想测试这种情况,因此这不是一个选择。