在Jenkinsx构建容器中工作... 我正在尝试在Docker容器中挂载卷。目录已安装,但是容器中不存在源(主机)目录上的文件。
在这种情况下,主机也是一个docker容器,所以基本上我是从docker容器运行docker-compose的。
有人遇到此问题并有解决方案吗?
结果如下:
bash-4.2# pwd
/home/jenkins
bash-4.2# ls -l datadir/
total 4
-rw-r--r-- 1 root root 4 May 15 20:06 foo.txt
bash-4.2# cat docker-compose.yml
version: '2.3'
services:
testing-wiremock:
image: rodolpheche/wiremock
volumes:
- ./datadir:/home/wiremock
bash-4.2# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 95G 24G 71G 25% /
tmpfs 7.4G 0 7.4G 0% /dev
tmpfs 7.4G 0 7.4G 0% /sys/fs/cgroup
/dev/sda1 95G 24G 71G 25% /etc/hosts
tmpfs 7.4G 4.0K 7.4G 1% /root/.m2
shm 64M 0 64M 0% /dev/shm
tmpfs 7.4G 4.0K 7.4G 1% /home/jenkins/.docker
tmpfs 7.4G 1.9M 7.4G 1% /run/docker.sock
tmpfs 7.4G 0 7.4G 0% /home/jenkins/.gnupg
tmpfs 7.4G 12K 7.4G 1% /run/secrets/kubernetes.io/serviceaccount
bash-4.2# docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating jenkins_testing-wiremock_1 ... done
bash-4.2# docker ps |grep wiremock
6293dee408aa rodolpheche/wiremock "/docker-entrypoint.…" 26 seconds ago Up 25 seconds 8080/tcp, 8443/tcp jenkins_testing-wiremock_1
8db3b729c5d2 rodolpheche/wiremock "/docker-entrypoint.…" 21 minutes ago Up 21 minutes (unhealthy) 8080/tcp, 8443/tcp zendeskintegration_rest_1
bd52fb96036d rodolpheche/wiremock "/docker-entrypoint.…" 21 minutes ago Up 21 minutes (unhealthy) 8080/tcp, 8443/tcp zendeskintegration_zendesk_1
bash-4.2# docker exec -it 6293dee408aa bash
root@6293dee408aa:/home/wiremock# ls -ltr
total 8
drwxr-xr-x 2 root root 4096 May 15 20:06 mappings
drwxr-xr-x 2 root root 4096 May 15 20:06 __files
答案 0 :(得分:0)
我可以通过在MacOS系统上运行此问题来重现该问题:
首先在已安装docker-compose的容器中打开外壳:
docker run --rm -v $(pwd):/work -v /var/run/docker.sock:/var/run/docker.sock --workdir /work -ti tmaier/docker-compose sh
我映射了当前文件夹,以便可以像在主机上一样处理当前项目。
然后在容器内:
docker-compose run testing-wiremock ls -lart
现在将docker-compose.yml更改为以下内容:
version: '2.3'
services:
testing-wiremock:
image: rodolpheche/wiremock
volumes:
- /tmp:/home/wiremock/
然后再次运行:
docker-compose run testing-wiremock ls -lart
这将向您显示主机(docker套接字实际运行的位置)上的/ tmp目录的内容。要进行测试,您甚至可以在/ tmp中创建一个文件夹和一个文件,然后再次运行“ docker-compose run”。您将看到新文件。
故事的道德: 如果已安装的文件夹与docker daemon实际运行的主机上的现有文件夹相对应,则映射将真正起作用。
主机->容器->容器(此处的安装是指主机上的路径)
在您的特定情况下,文件夹是空的,因为主机上不存在已安装的路径(通过运行docker-compose config
进行检查)(主机=运行Jenkins容器的主机,而不是Jenkins容器本身)。