#docker #docker-compose #confluence #docker-volume
#docker #docker-compose #слияние #docker-volume
Вопрос:
я пытаюсь создать том каталога в контейнере docker (confluence). https://hub.docker.com/r/atlassian/confluence-server /
Чтобы исправить ошибку с postgres, я должен вручную добавить файлы драйверов в контейнер. Местоположение внутри контейнера:
/opt/atlassian/confluence/confluence/WEB-INF/lib
После создания тома я хотел добавить в каталог более новый драйвер. Итак, внутри моего docker-compose.yaml я сопоставил том с каталогом.
- ./data/driverfiles:/opt/atlassian/confluence/confluence/WEB-INF/lib
Том и каталог создаются после вызова docker-compose up
, и все кажется нормальным.
Проблема в том, что том остается пустым, и при запуске интерактивной оболочки в контейнер каталог, который когда-то заполнялся тысячами файлов, тоже пуст. При удалении тома из docker-compose.yaml каталог снова заполняется файлами.
Объективно, похоже, что сопоставление тома с этим каталогом каким-то образом запрещает контейнеру обогащать его файлами, что здесь происходит?
Ответ №1:
Если вы монтируете каталог хоста поверх каталога контейнера, во время запуска контейнера это всегда односторонняя операция: все, что находится в каталоге хоста (если что-либо), полностью заменяет все, что могло быть в образе. Содержимое контейнера никогда не будет скопировано в каталог хоста, если код запуска образа явно не сделает это за вас.
Если вам нужно изменить файл конфигурации в контейнере, вам необходимо сначала скопировать его из образа; например
# with the volumes: mount deleted
docker-compose run confluence
sh -c 'cd /opt/atlassian/confluence/confluence/WEB-INF/lib amp;amp; tar cf - .'
| tar xf - .
Этот конкретный вызов скопирует весь каталог на хост, где вы сможете смонтировать его снова.
Обратите внимание, что если есть обновленный образ, который изменяет содержимое этого lib
каталога, содержимое, которое у вас есть на хосте, всегда будет иметь приоритет; это скрывает любые изменения, которые могут быть внесены в образ.
Возможно, вам будет надежнее создать пользовательский образ, который добавляет необходимые файлы драйверов
FROM ...conflunce:...
COPY ... /opt/atlassian/confluence/confluence/WEB-INF/lib
# Use CMD and all other options from the original image
Укажите build: .
(и нет image:
) в docker-compose.yml
файле, чтобы использовать этот Dockerfile.