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