вопрос разрешения файла внутри контейнера контейнера для пользователя без полномочий root - PullRequest
0 голосов
/ 13 октября 2019

Я расширяю образ докера программы отсюда и хочу изменить некоторые конфиги и создать свой собственный образ докера. Я написал Dockerfile следующим образом и заменил файл server.xml следующим образом:

FROM exoplatform/exo-community
COPY server.xml /opt/exo/conf
RUN chmod 777 /opt/exo/conf/server.xml

Когда я создал образ Docker и запустил экземпляр из образа, работающая программа контейнера не может получить доступ кфайл server.xml, потому что его владельцем является пользователь root, и я вижу ошибку permission denied. Я попытался изменить владельца в Dockerfile командой chmod, но вижу ошибку Operation not permitted. Пользователь работающего контейнера не является пользователем root и не может получить доступ к файлу server.xml, который принадлежит пользователю root. Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 13 октября 2019

Если это на самом деле просто файл конфигурации, я бы не стал создавать собственный образ вокруг него. Вместо этого используйте параметр docker run -v, чтобы внедрить его во время выполнения

docker run \
  -v $PWD/server.xml:/opt/exo/conf/server.xml \
  ... \
  exoplatform/exo-community

(вы все равно можете столкнуться с теми же проблемами с разрешениями.)

В подходе Dockerfile базовый образработает как альтернативный пользователь USER , но инструкция COPY по умолчанию делает файлы, принадлежащие пользователю root. Начиная с относительно недавнего Docker (18.03; если вы используете Docker 1.13 в CentOS / RHEL 7, это не сработает), вы должны иметь возможность

COPY --chown=exo server.xml /opt/exo/conf

Или, если это не сработает, вы можетеявное переключение на пользователя root и обратно

COPY server.xml /opt/exo/conf
USER root
RUN chown exo /opt/exo/conf/server.xml
USER exo
...