Как я могу обмениваться данными между хостом и контейнером с помощью монтирования - PullRequest
0 голосов
/ 01 июня 2018

Я пытался обмениваться данными между моим хостом и моим контейнером.Я много читал о томах, и мне кажется, что я неправильно понял некоторые основные принципы обмена данными.

Вот как я это делал (с Docker Compose)

version: "2"
services:
  my-server:
    volumes:
      - type: bind
        source: ./test/
        target: /var/logs

Проблема с этим подходом состоит в том, что первоначальное создание монтирования уничтожает любые данные в целевой папке.Так, например, если мое изображение было построено из другого изображения, в котором по какой-то причине были журналы в этой папке (по любой причине), журналы были бы уничтожены.

Это серьезная проблема в моем случае использования.Мне нужно смонтировать том (в основном папку), чтобы я мог обмениваться данными между моим хостом и гостем, подобно тому, как будет работать общая папка с виртуальной машиной.

Я просматривал именованные тома, ноИсходя из того, что я понимаю, именованные и анонимные тома предназначены для совместного использования данных между контейнерами, а не для обмена данными с хостом (это то, что мне нужно для моего варианта использования).

Итак, помимо bind mounts, этоВозможен ли обмен данными между хостом и контейнером?

1 Ответ

0 голосов
/ 01 июня 2018

Это не проблема Docker.Я думаю, что вы столкнетесь с этим с любым креплением.В основном вы уже используете правильный механизм для обмена данными между хостом и вашим контейнером.

Когда вы монтируете что-то в linux, цель монтирования (то есть путь, по которому вы монтируете что-либо) всегда заменяется корневымвсего, что вы монтируете.Он не объединяет содержимое цели монтирования с содержимым (в данном случае) подключенного подключенного каталога.Я удивлен, что работает с общими папками ВМ, потому что вы рискуете столкновения.например, один и тот же файл в обоих местах.Как это решит это?Монтирование файловой системы - это не то же самое, что монтирование в Dropbox, как синхронизация файлов между двумя местоположениями.

Я предлагаю вам выполнить монтирование привязки в другое место в вашем контейнере, в котором нет содержимого, а затем изменить рабочий процесс в контейнере.чтобы справиться с этим.В вашем примере это звучит так, как будто вы пытаетесь собрать журналы.Это также звучит так, как будто в контейнере сконфигурирована директория журнала, возможно, есть содержимое, которое вы хотите скопировать на хост.Этого можно добиться, если сам контейнер инициирует сам себя, настроив новый каталог журналов, прежде чем запускать ваши службы / запускать что-либо, и копировать любые существующие журналы в это место.Это новое место будет креплением.Ваш сценарий инициализации также может определить, использовалось ли монтирование привязки таким образом, и не синхронизировать данные.Это действительно конкретная проблема приложения.

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