У меня есть 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
Заранее спасибо.
С docker exec nifi /bin/bash
и я приземляюсь на /opt/nifi/nifi-current
, так как это WORKDIR
на базовом изображении.
docker exec
не запускает контейнер. Он запускает команду для уже запущенного контейнера. У вас должна быть команда docker run
или файл docker-compose или что-то в этом роде. Но это тоже может быть причиной. Если вы не остановите контейнер и не запустите новый, ваш новый образ не будет использоваться.
Да, плохо, я бегаю с docker run -it -d --rm --name nifi nifi-test:latest
Взглянув на предоставленный файл dockerfile, вы увидите следующее определение тома.
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
Чтобы справиться с этим, вы можете
Спасибо, ваш ответ помог мне понять, в чем здесь дело. В качестве обходного пути я создал каталог flow
на том же уровне, что и каталог conf
. Вроде бы теперь он не мешает направленному VOLUME
пути. Вы не знаете, почему это происходит только в Linux? Если вы попытаетесь воссоздать в Windows/macOS, проблема не возникнет.
Как вы запускаете контейнер? Если вы сопоставите что-нибудь в пути /opt/nifi/nifi-current/conf, это скроет каталог.