Как подключить общий том во время сборки докера? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь собрать bind9 с помощью докера, используя общий том для файлов зоны

Я хочу собрать bind9 с centos в докере. В Dockerfile я устанавливаю bind, и во время установки он создает / var / named с некоторыми файлами, но когда я запускаю контейнер с общим томом в / var / named, на котором у меня есть файлы зон, исходные файлы в / var / named исчезают.

FROM centos
RUN yum -y install bind -> after that, there are files in /var/named

но когда я запускаю контейнер, используя:

-v /path/to/zonefiles/folder:/var/named

контейнер не запускается, потому что изначально файлы в / var / named пропали Любое предложение, как преодолеть эту проблему? может быть возможно использовать общий том во время "сборки докера"?

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Я предполагаю, что вы пытаетесь добавить локальные файлы в /path/to/zonefiles/folder на вашем хосте к тем, которые сгенерированы bind в /var/named.Единственный способ понять, как это сделать, - это объединить папки самостоятельно.

Как вы уже видели, при монтировании тома файловая система будет перекрывать точку монтирования.Чтобы достичь желаемого, вы должны скопировать файлы в точке монтирования перед созданием нового монтирования и объединить их с локальными файлами, чтобы они все еще существовали после монтирования тома.

Следующая процедура должна выполнить это:

docker build -t bind .
docker run -d --name bind bind
docker cp bind:/var/named /path/to/zonefiles/folder
docker stop bind && docker rm bind
docker run -d --name bind -v /path/to/zonefiles/folder:/var/named bind

Объяснение:

  1. Первая строка создаст ваш образ
  2. Во 2-й строке будет запущен контейнер, чтобы вы могли скопировать из него файлы
  3. В 3-й строке будут скопированы сгенерированные файлы в папку хоста
  4. 4-я строка остановит и удалит контейнер
  5. В 5-й строке ваш контейнер запускается с объединенной папкой с конфигурационным файлом

Я считаю, что это приведет к желаемому поведению, которое вы ищете.

0 голосов
/ 15 июня 2019

Я не знаком с Bind9, но аргумент -v /path/to/zonefiles/folder:/var/named монтирует том в / var / named в контейнере во время выполнения вместо того, что могло быть на изображении.Единственный способ, которым вы можете иметь файлы в / var / named во время выполнения, - это если эти же файлы находятся в / path / to / zonefiles на вашем хосте во время выполнения.

Возможно, вам следует рассмотреть возможность подключения файлов кточка, отличная от / var / named.Так что -v /path/to/zonefiles/folder:/var/namedSomethingElse.

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