如何像在GitLab共享运行器上一样使docker run -v在我的本地gitlab-runner上工作?

时间:2019-10-19 21:14:59

标签: docker gitlab gitlab-ci mount gitlab-ci-runner

我试图找到需要添加到自托管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?建议使用工件,因为我想测试这种情况,因此这不是一个选择。

0 个答案:

没有答案