Как работает том - сопоставление устройств в Docker - PullRequest
0 голосов
/ 18 мая 2018

Я создал два тома Docker:

docker volume create volume1
docker volume create volume2

, затем я создал контейнер Docker с помощью команды:

docker create -it ... some options ... -v volume1:/var/vcap/store -v volume2:/var/vcap/store2 --privileged myimage /bin/bash

В контейнере Docker правильно настроен ssh, поэтому при вводе sshЯ правильно вижу том, смонтированный в / var / vcap / store.В частности, я вижу это:

/dev/sda1 on /var/vcap/store type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /var/vcap/store2 type ext4 (rw,relatime,data=ordered)

Кроме того, я вижу и другие файловые системы на устройстве / dev / sda1:

/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hostname type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hosts type ext4 (rw,relatime,data=ordered)

, это меня сильно смущает, потому что не понятномне, как можно иметь одно и то же устройство, смонтированное в разных папках, и быть разными файловыми системами.Фактически, я проверил, что если я создаю файл в / var / vcap / store на виртуальной машине Linux, на котором размещен контейнер на Mac, я вижу в папке:

/var/lib/docker/volumes/volume1/_data 

созданный файл.Если я создаю его в / var / vcap / store2 на виртуальной машине Linux, я вижу, что он пока хорошо создан под

/var/lib/docker/volumes/volume2/_data

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

mount /dev/sda1 /var/vcap/store

Я вижу в этой папке следующее содержимое:

cni  containerd  docker  kubeadm  kubelet-plugins  log  lost+found  nfs  swap

, которое я не знаю, откуда оно.

вопросы:

  1. Когда я монтирую том в Docker, как он отображается на устройстве / dev / sda1?
  2. Как возможно одно и то же устройство для разных файловых систем?
  3. Предположим, я использую Docker в привилегированном режиме, какую команду монтирования мне следует использовать для повторного монтирования файловых систем, ранее размонтированных?

1 Ответ

0 голосов
/ 21 мая 2018

Отвечая на ваши вопросы:

  1. Когда я монтирую том в Docker, как он отображается на устройстве / dev / sda1?

При создании тома Docker docker создает внутреннюю символическую ссылку на / var / lib / docker / volume / имя_тома .Если / var / lib / docker / volume смонтирован в / dev / sda1, каждый том и подключенный файл или каталог, принадлежащий / dev / sda1, будут подключены в одной точке, поскольку на самом деле они являются символическими ссылками.

Как возможно одно и то же устройство для разных файловых систем?

На него также дан ответ с ответом №1: Это та же самая файловая система, но разные внутренние символические ссылки.Docker выполняет «виртуальное» монтирование, поэтому у вас есть только один реальный / dev / sda1, хотя их несколько.Вот почему вы не можете размонтировать / dev / sda1 из контейнера.Размонтируется только один «виртуальный» докер.

Предположим, я использую Docker в привилегированном режиме, какую команду монтирования я должен использовать для повторного монтирования файловых систем, ранее размонтированных?

Виртуальные монтирования, выполняемые docker run илиdocker-compose up невозможно сделать внутри контейнера, потому что тома будут относиться к точке монтирования хоста (/ dev / sda1).Определенно, я рекомендую контролировать монтирование и демонтаж с хоста, который запускает контейнеры.Если вам нужно монтировать и демонтировать из контейнера, пожалуйста, монтируйте и демонтируйте разные точки монтирования (например, samba dir, хранилище nfs и т. Д.), Чем current / dev / sda1, чтобы избежать недоразумений.

...