#openshift #apache-nifi
#openshift #apache-nifi
Вопрос:
При попытке запустить docker-образ apache nifi, присутствующий в docker hub в open shift, у меня возникла проблема с разрешением, поскольку в docker-образе был запущен пользовательский nifi, который не разрешен через openshft. итак, я создаю образ docker, используя приведенный ниже файл docker, но теперь я даже не могу запустить образ сборки в моем локальном контейнере docker.
FROM openjdk:8-jre
ARG NIFI_VERSION=1.12.1
ARG BASE_URL=https://archive.apache.org/dist
ARG MIRROR_BASE_URL=${MIRROR_BASE_URL:-${BASE_URL}}
ARG NIFI_BINARY_PATH=${NIFI_BINARY_PATH:-/nifi/${NIFI_VERSION}/nifi-${NIFI_VERSION}-bin.zip}
ARG NIFI_TOOLKIT_BINARY_PATH=${NIFI_TOOLKIT_BINARY_PATH:-/nifi/${NIFI_VERSION}/nifi-toolkit-${NIFI_VERSION}-bin.zip}
ENV NIFI_BASE_DIR=/opt/nifi
ENV NIFI_HOME ${NIFI_BASE_DIR}/nifi-current
ENV NIFI_TOOLKIT_HOME ${NIFI_BASE_DIR}/nifi-toolkit-current
ENV NIFI_PID_DIR=${NIFI_HOME}/run
ENV NIFI_LOG_DIR=${NIFI_HOME}/logs
USER root
ADD sh/ ${NIFI_BASE_DIR}/scripts/
# Setup NiFi user and create necessary directories
RUN mkdir -p ${NIFI_BASE_DIR}
amp;amp; apt-get update
amp;amp; apt-get install -y jq xmlstarlet procps
# Download, validate, and expand Apache NiFi Toolkit binary.
RUN curl -fSL ${MIRROR_BASE_URL}/${NIFI_TOOLKIT_BINARY_PATH} -o ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip
amp;amp; echo "$(curl ${BASE_URL}/${NIFI_TOOLKIT_BINARY_PATH}.sha256) *${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip" | sha256sum -c -
amp;amp; unzip ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip -d ${NIFI_BASE_DIR}
amp;amp; rm ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip
amp;amp; mv ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION} ${NIFI_TOOLKIT_HOME}
amp;amp; ln -s ${NIFI_TOOLKIT_HOME} ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}
amp;amp; chmod -R g rwX ${NIFI_TOOLKIT_HOME}
# Download, validate, and expand Apache NiFi binary.
RUN curl -fSL ${MIRROR_BASE_URL}/${NIFI_BINARY_PATH} -o ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip
amp;amp; echo "$(curl ${BASE_URL}/${NIFI_BINARY_PATH}.sha256) *${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip" | sha256sum -c -
amp;amp; unzip ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip -d ${NIFI_BASE_DIR}
amp;amp; rm ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip
amp;amp; mv ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION} ${NIFI_HOME}
amp;amp; mkdir -p ${NIFI_HOME}/conf
amp;amp; mkdir -p ${NIFI_HOME}/database_repository
amp;amp; mkdir -p ${NIFI_HOME}/flowfile_repository
amp;amp; mkdir -p ${NIFI_HOME}/content_repository
amp;amp; mkdir -p ${NIFI_HOME}/provenance_repository
amp;amp; mkdir -p ${NIFI_HOME}/state
amp;amp; mkdir -p ${NIFI_LOG_DIR}
amp;amp; ln -s ${NIFI_HOME} ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}
amp;amp; chgrp -R 0 ${NIFI_BASE_DIR}
amp;amp; chmod -R g rwX ${NIFI_BASE_DIR}
amp;amp; chmod -R g=u ${NIFI_BASE_DIR}/
amp;amp; chmod -R g=u /etc/passwd
#ADD bootstrap.conf ${NIFI_HOME}/conf/bootstrap.conf
# Clear nifi-env.sh in favour of configuring all environment variables in the Dockerfile
RUN echo "#!/bin/shn" > ${NIFI_HOME}/bin/nifi-env.sh
# Web HTTP(s) amp; Socket Site-to-Site Ports
EXPOSE 8080 8443 10000
WORKDIR ${NIFI_HOME}
USER 1001
# Apply configuration and start NiFi
#
# We need to use the exec form to avoid running our command in a subshell and omitting signals,
# thus being unable to shut down gracefully:
# https://docs.docker.com/engine/reference/builder/#entrypoint
#
# Also we need to use relative path, because the exec form does not invoke a command shell,
# thus normal shell processing does not happen:
# https://docs.docker.com/engine/reference/builder/#exec-form-entrypoint-example
ENTRYPOINT ["../scripts/start.sh"]
Получение этой ошибки при запуске в контейнере docker.
replacing target file /opt/nifi/nifi-current/conf/nifi.properties
replacing target file /opt/nifi/nifi-current/conf/nifi.properties
replacing target file /opt/nifi/nifi-current/conf/nifi.properties
replacing target file /opt/nifi/nifi-current/conf/nifi.properties
replacing target file /opt/nifi/nifi-current/conf/nifi.properties
/opt/nifi/scripts/toolkit.sh: 18: /opt/nifi/scripts/toolkit.sh: cannot create //.nifi-cli.nifi.properties: Permission denied
Эта сборка предназначена для open shift, так как пользователь apache nifi не работает в openshift и выдает проблемы с разрешениями при запуске локального docker
Ответ №1:
Итак, я столкнулся с той же проблемой, пытаясь запустить NIFI на Openshift, надеюсь, это может вам помочь. Шаги, использованные для меня, были:
Как показывает @JuanD, я добавил конфигурацию в openshift:
securityContext:
runAsUser: 1000
Далее, что я и сделал:
RUN chmod -R g rw ${NIFI_BASE_DIR}
amp;amp; chmod -R g rwX ${NIFI_BASE_DIR}/scripts
amp;amp; useradd --shell /bin/bash -u ${UID} -g ${GID} -m nifi
Другая перестановка, которую я сделал, заключалась в перемещении файлов копирования, которые должны выполняться перед этой командой.
И чтобы избежать ненужных проблем, я также добавил uid-entrypoint.sh
#!/bin/bash
if ! whoami amp;> /dev/null; then
if [ -w /etc/passwd ]; then
echo "${USER_NAME:-nifi}:x:$(id -u):0:${USER_NAME:-nifi} user:${HOME}:/sbin/nologin" >> /etc/passwd
fi
fi
exec "$@"
Весь файл dockerfile:
ARG IMAGE_NAME=openjdk
ARG IMAGE_TAG=8-jre
FROM ${IMAGE_NAME}:${IMAGE_TAG}
ARG MAINTAINER="Apache NiFi <dev@nifi.apache.org>"
LABEL maintainer="${MAINTAINER}"
LABEL site="https://nifi.apache.org"
ARG UID=1000
ARG GID=0
ARG NIFI_VERSION=1.14.0
ARG BASE_URL=https://archive.apache.org/dist
ARG MIRROR_BASE_URL=${MIRROR_BASE_URL:-${BASE_URL}}
ARG NIFI_BINARY_PATH=${NIFI_BINARY_PATH:-/nifi/${NIFI_VERSION}/nifi-${NIFI_VERSION}-bin.zip}
ARG NIFI_TOOLKIT_BINARY_PATH=${NIFI_TOOLKIT_BINARY_PATH:-/nifi/${NIFI_VERSION}/nifi-toolkit-${NIFI_VERSION}-bin.zip}
ENV NIFI_BASE_DIR=/opt/nifi
ENV NIFI_HOME ${NIFI_BASE_DIR}/nifi-current
ENV NIFI_TOOLKIT_HOME ${NIFI_BASE_DIR}/nifi-toolkit-current
ENV NIFI_PID_DIR=${NIFI_HOME}/run
ENV NIFI_LOG_DIR=${NIFI_HOME}/logs
# Download, validate, and expand Apache NiFi Toolkit binary.
RUN mkdir -p ${NIFI_BASE_DIR}
amp;amp; apt-get update
amp;amp; apt-get install -y jq xmlstarlet procps
amp;amp; curl -fSL ${MIRROR_BASE_URL}/${NIFI_TOOLKIT_BINARY_PATH} -o ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip
amp;amp; echo "$(curl ${BASE_URL}/${NIFI_TOOLKIT_BINARY_PATH}.sha256) *${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip" | sha256sum -c -
amp;amp; unzip ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip -d ${NIFI_BASE_DIR}
amp;amp; rm ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}-bin.zip
amp;amp; mv ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION} ${NIFI_TOOLKIT_HOME}
amp;amp; ln -s ${NIFI_TOOLKIT_HOME} ${NIFI_BASE_DIR}/nifi-toolkit-${NIFI_VERSION}
# Download, validate, and expand Apache NiFi binary.
RUN curl -fSL ${MIRROR_BASE_URL}/${NIFI_BINARY_PATH} -o ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip
amp;amp; echo "$(curl ${BASE_URL}/${NIFI_BINARY_PATH}.sha256) *${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip" | sha256sum -c -
amp;amp; unzip ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip -d ${NIFI_BASE_DIR}
amp;amp; rm ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}-bin.zip
amp;amp; mv ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION} ${NIFI_HOME}
amp;amp; mkdir -p ${NIFI_HOME}/conf
amp;amp; mkdir -p ${NIFI_HOME}/database_repository
amp;amp; mkdir -p ${NIFI_HOME}/flowfile_repository
amp;amp; mkdir -p ${NIFI_HOME}/content_repository
amp;amp; mkdir -p ${NIFI_HOME}/provenance_repository
amp;amp; mkdir -p ${NIFI_HOME}/state
amp;amp; mkdir -p ${NIFI_LOG_DIR}
amp;amp; ln -s ${NIFI_HOME} ${NIFI_BASE_DIR}/nifi-${NIFI_VERSION}
COPY scripts/ ${NIFI_BASE_DIR}/scripts/
RUN chmod -R g rw ${NIFI_BASE_DIR}
amp;amp; chmod -R g rwX ${NIFI_BASE_DIR}/scripts
amp;amp; useradd --shell /bin/bash -u ${UID} -g ${GID} -m nifi
# Clear nifi-env.sh in favour of configuring all environment variables in the Dockerfile
RUN echo "#!/bin/shn" > $NIFI_HOME/bin/nifi-env.sh
# Web HTTP(s) amp; Socket Site-to-Site Ports
EXPOSE 8080 8443 10000 8000
WORKDIR ${NIFI_HOME}
USER ${UID}
ENTRYPOINT [ "../scripts/uid-entrypoint.sh" ]
CMD [ "../scripts/start.sh" ]
Я надеюсь, что это может помочь.
Ответ №2:
У меня была аналогичная проблема при развертывании пользовательского контейнера nifi в Openshift. Добавление этого в развертывание.yaml under spec:
помогло:
securityContext:
runAsUser: 1000
fsGroup: 1000
Комментарии:
1. Получение ошибки создания: запрещены модули «nifi-6-«: невозможно выполнить проверку на соответствие какому-либо ограничению контекста безопасности: [fsGroup: недопустимое значение: [] int64{1000}: 1000 не является разрешенной спецификацией группы.контейнеры [0].SecurityContext.SecurityContext.RunAsUser: недопустимое значение: 1000:должно быть в диапазонах: [1000310000, 1000319999]] и оно не запускается
2. Не могли бы вы рассказать мне о полных шагах, которые вы выполняете, и не могли бы вы разработать пользовательский nifi..
3. Я не заметил, что в вашей сборке docker вы переключились на пользователя 1001. Вы пробовали обновлять свой файл yaml до
runAsUser: 1001
? Мы настраиваем изображение Nifi с помощью некоторого пользовательского кода во время сборки Dccker. Как вы запускаете модуль Nifi в OpenShift? Как statefulset, развертывание или обычный модуль?4. Развертывание образа с помощью раскрывающегося списка deploy image и поиска в нашем репозитории, который был загружен после сборки образа из файла docker. RunAsUser: 1001 это тоже пробовали, но появляется та же ошибка, что и 1000