Значение «устройство» и «точка монтирования» в docker томах - PullRequest
2 голосов
/ 27 мая 2020

Я хочу прояснить значение «устройство» и «точка монтирования», когда я выполняю команду

docker volume inspect

в контейнере Postgres. Я вручную создал папку test_postgresdb_vol_2 в /user/data/test_postgresdb_vol_2 для сохранения данных из контейнера, но теперь я запутался, так как у меня два разных пути. Не могли бы вы прояснить, что происходит и что означают пути «устройства» и «точки монтирования».

Пример проверки тома:

[
    {
        "CreatedAt": "...",
        "Driver": "local",
        "Labels": {
            ....
        },
        "Mountpoint": "/var/lib/docker/volumes/test_pgdata/_data",
        "Name": "test_pgdata",
        "Options": {
            "device": "/user/data/test_postgresdb_vol_2",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]

Пример docker -compose:

postgres:
  container_name: postgres
  image: postgres
  volumes:
    - pgdata:/var/lib/postgresql/data 
  environment:
    ...
    PGDATA: /var/lib/postgresql/data/pgdata
volumes:
  pgdata:
    driver: local
    driver_opts:
       o: bind
       type: none
       device: /user/data/test_postgresdb_vol_2

1 Ответ

2 голосов
/ 27 мая 2020

Эти детали в выводе docker volume inspect являются деталями реализации, которые можно безопасно игнорировать.

Внутренне текущая стандартная реализация Docker именованных томов дает им присутствие файловой системы внутри /var/lib/docker/volumes. В этом случае вы сказали Docker, что том фактически должен быть создан с помощью системного вызова mount (2), а точнее, как монтирование привязанного типа. Параметры, которые вы видите, могут быть параметрами mount (8)

/sbin/mount -o bind $DEVICE $MOUNT_POINT

. Вы можете заметить, что Driver и Options соответствуют вещам, которые вы указали непосредственно в * 1014. * file, pgdata соответствует имени тома, test соответствует имени текущего каталога (и, в частности, имени проекта Compose, если вы его переопределите), а test_pgdata, где он появляется, представляет собой комбинацию два.

Все это не имеет значения для стандартного кода приложения. Из файла docker-compose, который вы показали, вы объявляете, что именованный том local и поддерживается указанным каталогом c хоста, и он монтируется в контейнер postgres по указанному пути c. Команды типа inspect производят отладочные данные низкого уровня, которые вам почти никогда не понадобятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...