Docker挂载空目录

时间:2019-05-15 20:12:06

标签: docker docker-compose jenkins--x

在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 

1 个答案:

答案 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容器本身)。