При запуске следующего файла докеров я получаю "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
это работает. Но я не хочу запускать его с рутом. В любом случае я могу запустить его без рута?
Для изменения прав доступа к файлам, которые вам не принадлежат, в 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
изменить, но может предоставить этому пользователю больший доступ, чем вы хотите, для изменения сценария внутри контейнера.
Установите разрешения перед созданием образа
chmod +x scripts/myScript.sh
docker build .
docker сохранит разрешения при копировании файлов.
Проверьте права доступа к каталогу / scripts, используя ls -ld scripts
. Возможно, у вашего пользователя нет разрешения на запись в этот каталог.
используйте sudo chmod вместо простого использования chmod