我的.gitlabci文件中包含以下几行:
- echo "$PWD"
- ls -l "$PWD"
- docker run --volume "$PWD":/code debian:stable ls -l /code
以下是输出:
$ echo "$PWD"
/builds/ben/project
$ ls -l "$PWD" total 52
-rw-rw-rw- 1 root root 946 Feb 19 14:53 ChangeLog
-rw-rw-rw- 1 root root 294 Feb 19 14:53 INSTALL
-rw-rw-rw- 1 root root 4341 Feb 19 14:53 Jenkinsfile
-rw-rw-rw- 1 root root 353 Feb 19 14:53 README.md
-rw-rw-rw- 1 root root 535 Feb 19 14:53 TODO
drwxrwxrwx 4 root root 4096 Feb 19 14:53 application
drwxrwxrwx 2 root root 4096 Feb 19 14:53 library
drwxrwxrwx 3 root root 4096 Feb 19 14:53 public
drwxrwxrwx 3 root root 4096 Feb 19 14:53 tests
$ docker run --volume "$PWD":/code debian:stable ls -l /code
total 0
以下是我的.gitlabci文件:
code_quality:
image: docker:stable
variables:
DOCKER_DRIVER: overlay
allow_failure: true
services:
- docker:dind
script:
- echo "$PWD"
- ls -l "$PWD"
- docker run --volume "$PWD":/code debian:stable ls -l /code
最后是我的跑步者的config.toml:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "test"
url = "http://docker.int.com:1040/"
token = "*************"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"]
extra_hosts = ["mygitlab.com:XXX.XXX.XXX.XXX"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
我不明白为什么最后一个命令不显示$ PWD目录(/ builds / ben / project)的内容。我的卷似乎无法成功挂载,但没有收到错误。
答案 0 :(得分:1)
我确定您正在使用docker-in-docker
模式。
在此模式下,管道中的docker
命令有效地连接到 HOST 计算机的docker守护程序,并将所有命令发送到那里。结果,主机尝试将/builds/ben/project
路径绑定到容器中,但是没有这样的路径。再次,按照绑定挂载行为,此文件夹将被创建为空并映射到容器中。
如果您使用的是非特权模式(映射/var/run/docker.sock
),请尝试切换为使用docker:dind
作为服务。在这种情况下,守护程序将从您的构建作业中获取上下文。否则,您必须手动将数据复制到卷中。
在使用/var/run/docker.sock
时,您实际上将未修改的docker命令传递给了守护程序,该守护程序在自己的上下文中执行。这意味着他使用他的文件系统,而不是您(工作)的文件系统。我已经通过手动克隆源使用类似
git clone ${CI_REPOSITORY_URL} --branch ${CI_COMMIT_REF_NAME} --single-branch /tmp/project
缺点是您需要在图像中安装git
。
这是gitlab writes:
将源仓库中的文件和目录共享到容器中 由于批量安装是在以下情况下完成的,因此无法正常工作 主机,而不是构建容器