Apache/Nifi 1.12.1 Проблема с образом Docker

У меня есть Dockerfile на основе apache/nifi:1.12.1, и я хочу расширить его следующим образом:

FROM apache/nifi:1.12.1
RUN mkdir -p /opt/nifi/nifi-current/conf/flow

Дело в том, что папка не создается, когда я собираю образ из дистрибутивов Linux, таких как Ubuntu и CentOS. Сборка прошла успешно, я запускаю ее с помощью docker run -it -d --rm --name nifi nifi-test, но когда я захожу в контейнер через docker exec, flow директории нет.

Странно то, что каталог flow создается нормально, когда я создаю образ через Windows и Docker Desktop. Я не могу понять, почему это происходит.

Я пробовал такие вещи, как USER nifi или RUN chown ..., но все же...

Для вашего удобства это базовое изображение: https://github.com/apache/nifi/blob/rel/nifi-1.12.1/nifi-docker/dockerhub/Dockerfile

Взгляните и на это: Вот как это выглядит в CLI

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

Как вы запускаете контейнер? Если вы сопоставите что-нибудь в пути /opt/nifi/nifi-current/conf, это скроет каталог.

Hans Kilian 04.05.2022 17:19

С docker exec nifi /bin/bash и я приземляюсь на /opt/nifi/nifi-current, так как это WORKDIR на базовом изображении.

Siraxis 04.05.2022 17:21
docker exec не запускает контейнер. Он запускает команду для уже запущенного контейнера. У вас должна быть команда docker run или файл docker-compose или что-то в этом роде. Но это тоже может быть причиной. Если вы не остановите контейнер и не запустите новый, ваш новый образ не будет использоваться.
Hans Kilian 04.05.2022 17:23

Да, плохо, я бегаю с docker run -it -d --rm --name nifi nifi-test:latest

Siraxis 04.05.2022 17:24
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
4
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взглянув на предоставленный файл dockerfile, вы увидите следующее определение тома.


Then if you run

docker image inspect apache/nifi:1.12.1

В результате, когда вы выполняете команду RUN для создания папки в каталоге conf, она завершается успешно.

НО при запуске контейнера тома монтируются и в результате перезаписывают все что находится под точкой монтирования /opt/nifi/nifi-current/conf

В вашем случае каталог flow.

Вы можете проверить это, отредактировав свой Dockerfile

FROM apache/nifi:1.12.1
# this will be overriden, by volumes
RUN mkdir -p /opt/nifi/nifi-current/conf/flow
# this will be available in the container environment
RUN mkdir -p /opt/nifi/nifi-current/flow

Чтобы справиться с этим, вы можете

  1. клонировать Dockerfile образа, который вы используете в качестве базового (тот, что в FROM) и удалить директиву VOLUME вручную. Затем построить его и используйте в своем FROM в качестве базового.
  2. Вы можете попытаться избежать добавления каталогов в точки монтирования, указанные в Dockerfile.

Спасибо, ваш ответ помог мне понять, в чем здесь дело. В качестве обходного пути я создал каталог flow на том же уровне, что и каталог conf. Вроде бы теперь он не мешает направленному VOLUME пути. Вы не знаете, почему это происходит только в Linux? Если вы попытаетесь воссоздать в Windows/macOS, проблема не возникнет.

Siraxis 06.05.2022 09:17

Другие вопросы по теме