Как записать в существующий заполненный том из docker -compose или docker run - PullRequest
0 голосов
/ 02 августа 2020

Проблема:

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

Моя попытка:

Я создал том shared-volume:

docker volume create shared-volume

Затем я хочу запустить новый контейнер, который должен записывать в этот том, если том пуст, то содержимое some-directory-with-content/ будет записано на том, это здорово:

docker run -ti --rm --mount source=shared-volume,target=/some-directory-with-content/ custom-image

После этого, когда я проверяю shared-volume, он содержит файлы, которые были в /some-directory-with-content/, вот где я не знаю, что правильный способ записи в этот shared-volume из docker run или docker compose.

Когда я пытался сделать то же самое со вторым контейнером:

docker run -ti --rm --mount source=shared-volume,target=/another-directory-with-content/ custom-image

Это только возвращает предыдущее содержимое, и я знаю, что это ожидаемый результат, поэтому здесь я не знал, невозможно ли добиться этой записи в shared-volume с помощью docker run или docker -compose или каким является правильный способ.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете передавать sh команды при запуске контейнера. В приведенном ниже примере я создаю файл somefile при монтировании, если он не существует. Я показываю содержимое файла, затем добавляю some-text в файл.

Просто запустите эту команду несколько раз, чтобы проверить ее.

docker run --rm --mount source=shared-volume,target=/some-directory-with-content/ alpine sh -c "touch /some-directory-with-content/somefile && cat /some-directory-with-content/somefile && echo "some-text" >> /some-directory-with-content/somefile"

Это ожидаемый результат:

neo@neo-desktop:shared-vol-demo$ docker run --rm --mount source=shared-volume,target=/some-directory-with-content/ alpine sh -c "touch /some-directory-with-content/somefile && cat /some-directory-with-content/somefile && echo "some-text" >> /some-directory-with-content/somefile"
neo@neo-desktop:shared-vol-demo$ docker run --rm --mount source=shared-volume,target=/some-directory-with-content/ alpine sh -c "touch /some-directory-with-content/somefile && cat /some-directory-with-content/somefile && echo "some-text" >> /some-directory-with-content/somefile"
some-text
neo@neo-desktop:shared-vol-demo$ docker run --rm --mount source=shared-volume,target=/some-directory-with-content/ alpine sh -c "touch /some-directory-with-content/somefile && cat /some-directory-with-content/somefile && echo "some-text" >> /some-directory-with-content/somefile"
some-text
some-text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...