Как запустить контейнер OpenShift Docker как что-то помимо root?

В настоящее время я запускаю Openshift, но я сталкиваюсь с проблемой при попытке создать/развернуть свой пользовательский контейнер Docker. Контейнер работает правильно на моем локальном компьютере, но как только он будет встроен в openshift и я попытаюсь развернуть его, я получу сообщение об ошибке. Я считаю, что проблема в том, что я пытаюсь запустить команды внутри контейнера как root.

(13)Permission denied: AH00058: Error retrieving pid file /run/httpd/httpd.pid

мой файл Docker, который я развертываю, выглядит так -

FROM centos:7
MAINTAINER me<me@me>
RUN yum update -y
RUN yum install -y git https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

RUN yum install -y ansible && yum clean all -y
RUN git clone https://github.com/dockerFileBootstrap.git
RUN ansible-playbook "-e edit_url=andrewgarfield edit_alias=emmastone site_url=testing.com" dockerAnsible/dockerFileBootstrap.yml
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); 
rm -f /lib/systemd/system/multi-user.target.wants/*;
rm -f /etc/systemd/system/*.wants/*;
rm -f /lib/systemd/system/local-fs.target.wants/*; 
rm -f /lib/systemd/system/sockets.target.wants/*udev*; 
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; 
rm -f /lib/systemd/system/basic.target.wants/*;
rm -f /lib/systemd/system/anaconda.target.wants/*;
COPY supervisord.conf /usr/etc/supervisord.conf
RUN rm -rf supervisord.conf
VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 80 443
#CMD ["/usr/bin/supervisord"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Ive столкнулся с подобным проблема несколько раз, когда он будет говорить такие вещи, как Permission Denied on file /supervisord.log или что-то подобное.

как я могу настроить его так, чтобы мой контейнер не запускал все команды как root? Кажется, это вызывает все проблемы, которые у меня возникают.

2 ответов


Openshift имеет строгую политику безопасности в отношении пользовательских сборок Docker.

посмотрите это Платформа Приложений OpenShift

в частности, в пункте 4 в разделе FAQ, здесь цитируется.

4. Почему мое изображение Docker не работает на OpenShift?

безопасности! Origin по умолчанию работает со следующей политикой безопасности:

контейнеры работают как уникальный пользователь без root, который отдельно от других пользователей системы Они не могут получить доступ к ресурсам хоста, запустить привилегированные или стать root Им предоставляются ограничения CPU и памяти, определенные системным администратором Любое постоянное хранилище, к которому они обращаются, будет иметь уникальную метку SELinux, которая не позволяет другим видеть их содержимое Эти параметры относятся к каждому проекту, поэтому контейнеры в разных проектах не могут видеть друг друга по умолчанию Обычные пользователи могут запускать докеры, исходные и пользовательские сборки По умолчанию сборки Docker могут (и часто) запускаются как root. Вы можете управлять тем, кто может создавать сборки Docker с помощью ресурсов сборки/docker и сборки/пользовательской политики. Обычные пользователи и администраторы проекта не могут изменять квоты безопасности.

многие контейнеры Docker ожидают запуска от root (и поэтому редактируют все содержимое файловой системы). Руководство автора изображения дает рекомендации по повышению безопасности изображения по умолчанию:

Не запускайте как root

сделать каталоги хотите записать в группу-доступно для записи и принадлежит группе id 0 Установите функцию net-bind для исполняемых файлов, если им необходимо выполнить привязку к портам

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

надеюсь, это поможет.


вы можете запустить docker как любой пользователь, а также root (а не Openshift по умолчанию build-in account UID -1000030000 при выдаче этих двух команд последовательно в командной строке OC cli tools oc login -u system:admin -n default С oc adm policy add-scc-to-user anyuid -z default -n projectname где projectname-имя вашего проекта, внутри которого вы назначены под вашим докером