Docker монтирует пустой каталог - PullRequest
0 голосов
/ 15 мая 2019

Работа в сборочном контейнере Jenkinsx ... Я пытаюсь смонтировать том в докер-контейнере.Каталог get монтируется, однако файлы, которые существуют в каталоге source (host), отсутствуют в контейнере.

В этом случае хост также является докерным контейнером, поэтому в основном я запускаю 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 голосов
/ 22 мая 2019

Я мог бы воспроизвести проблему, запустив это в системе 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

Это покажет вам содержимое каталога / tmp на хосте (где фактически работает сокет докера). Для тестирования вы даже можете создать папку и файл в / tmp и снова запустить «docker-compose run». Вы увидите новые файлы.

Мораль истории: Если смонтированная папка соответствует существующей папке на хосте, на котором фактически запущен демон докера, сопоставление будет фактически работать.

хост -> контейнер -> контейнер (здесь монтируются ссылки на пути на хосте)

В вашем конкретном случае папка монтируется пустой, потому что смонтированный путь (проверьте ее, запустив docker-compose config) отсутствует на хосте (хост = хост, на котором работает ваш контейнер Jenkins, а не сам контейнер Jenkins).

...