chmod: изменение прав доступа "myscript.sh": операция не разрешена

При запуске следующего файла Docker я получаю "chmod: changing permissions of '/scripts/entrypoint.sh': Operation not permitted" ошибка.

FROM sonarqube:7.7-community
ADD plugins/* /plugins/
ADD scripts/* /scripts/
ADD conf/* /conf/
ADD bin/* /bin/
RUN chmod -R a+X /scripts/myScript.sh
ENTRYPOINT ["/scripts/myScript.sh"]

Но когда я добавляю USER root это работает. Но я не хочу запускать его с правами root. В любом случае, я могу запустить его без рута?

5 ответов

Решение

Установите разрешения, прежде чем создавать образ

chmod +x scripts/myScript.sh
docker build .

Докер сохранит разрешения при копировании файлов.

Для изменения прав доступа к файлам, которыми вы не владеете в Linux, требуется root-доступ, и команда COPY, скорее всего, копирует файл как root. Вы можете вернуться к пользователю sonarqube после исправления разрешений. Вот пример Dockerfile для этого:

FROM sonarqube:7.7-community
COPY plugins/ /plugins/
COPY scripts/ /scripts/
COPY conf/ /conf/
COPY bin/ /bin/
USER root
RUN chmod 755 /scripts/myScript.sh
USER sonarqube
ENTRYPOINT ["/scripts/myScript.sh"]

Примечание. Я также переключился с ДОБАВИТЬ на КОПИРОВАТЬ, поскольку вы не извлекаете удаленные URL-адреса и не извлекаете файлы tar/zip. * также подразумевается при копировании каталога. Для одного сценария вам не нужно -R рекурсивный вариант, и я явно с разрешениями, так как сценарии оболочки также требуют доступа для чтения всех пользователей.

Если вы хотите, чтобы скрипт принадлежал sonarqube, вы можете запустить:

COPY --chown=sonarqube:sonarqube scripts/ /scripts/

Это должно позволить пользователю изменять разрешения для скрипта без USER изменить, но может дать этому пользователю больший доступ, чем вы хотите изменить сценарий внутри контейнера.

Проверьте разрешения для каталога /scripts, используя ls -ld scripts, Возможно, у вашего пользователя нет прав на запись в этот каталог.

При копировании вы можете использовать следующее:

      COPY --chmod=755 myScript.sh /detination/folder

Используйте sudo chmod вместо простого использования chmod

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