OpenShift3 Pro не запускает простой образ Centos, который запускается локально на минишифте

У меня есть простой образ докера Centos6:

FROM centos:6
MAINTAINER Simon 1905 <simbo@x.com>
RUN yum -y update && yum -y install httpd && yum clean all
RUN sed -i "s/Listen 80/Listen 8080/" /etc/httpd/conf/httpd.conf && \
  chown apache:apache /var/log/httpd && \
  chmod ug+w,a+rx /var/log/httpd && \
  chown apache:apache /var/run/httpd
RUN mkdir -p /var/www/html && echo "hello world!" >> /var/www/html/index.html
EXPOSE 8080
USER apache
CMD /usr/sbin/httpd -D FOREGROUND

Я могу запустить это локально и отправить на hub.docker.com. Если я затем зайду в веб-консоль Redhat OpenShift Container Developer Kit (CDK), работающую локально, и разверну образ из dockerhub, он будет работать нормально. Если я зайду в веб-консоль OpenShift3 Pro, модуль перейдет в аварийный цикл. На консоли или в командной строке нет журналов для диагностики проблемы. Любая помощь высоко ценится.

Чтобы попытаться определить, была ли это проблема только с Centos7, я изменил первую строку на centos:7 и снова это работает на minishift CDK, но не работает на OpenShift3 Pro. Он показывает что-то на вкладке журналов модуля:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.2.55. Set the 'ServerName' directive globally to suppress this message
(13)Permission denied: AH00058: Error retrieving pid file /run/httpd/httpd.pid
AH00059: Remove it before continuing if it is corrupted.

2 ответа

Это терпит неудачу, потому что Ваше изображение ожидает, чтобы бежать как определенный пользователь.

В Minishift это разрешено, так как возможность запускать образы от имени root.

В OpenShift Online ваши изображения будут работать как произвольно назначенный UID и никогда не будут работать как выбранный UID и никогда как root.

Если вам нужен только способ размещения статических файлов, смотрите:

Это сборщик S2I для получения статических файлов для Apache и запуска их в контейнере.

Вы можете использовать его как сборщик S2I, запустив:

oc new-app centos/httpd-24-centos7~<repository-url> --name httpd
oc expose svc/httpd

Или вы можете создать производное изображение, если хотите попробовать и настроить его.

В любом случае, посмотрите, как это реализовано, если хотите создать свой собственный.

Из документов Redhat Enterprise по адресу https://docs.openshift.com/container-platform/3.5/creating_images/guidelines.html:

По умолчанию OpenShift Container Platform запускает контейнеры, используя произвольно назначенный идентификатор пользователя. Это обеспечивает дополнительную защиту от процессов, покидающих контейнер, из-за уязвимости механизма контейнера и, таким образом, достижения расширенных разрешений на узле узла. Чтобы изображение могло работать как произвольный пользователь, каталоги и файлы, которые могут быть записаны процессами в образе, должны принадлежать корневой группе и быть доступны для чтения / записи этой группой. Файлы для выполнения также должны иметь права на групповое выполнение.

RUN chgrp -R 0 /some/directory \
  && chmod -R g+rwX /some/directory

Таким образом, в этом случае модифицированный файл Docker, который запускается на OpenShift 3 Online Pro:

FROM centos:6
MAINTAINER Simon 1905 <simbo@x.com>
RUN yum -y install httpd && yum clean all
RUN sed -i "s/Listen 80/Listen 8080/" /etc/httpd/conf/httpd.conf && \
  chown apache:0 /etc/httpd/conf/httpd.conf && \
  chmod g+r /etc/httpd/conf/httpd.conf && \
  chown apache:0 /var/log/httpd && \
  chmod g+rwX /var/log/httpd && \
  chown apache:0 /var/run/httpd && \
  chmod g+rwX /var/run/httpd
RUN mkdir -p /var/www/html && echo "hello world!" >> /var/www/html/index.html && \
  chown -R apache:0 /var/www/html && \
  chmod -R g+rwX /var/www/html
EXPOSE 8080
USER apache
CMD /usr/sbin/httpd -D FOREGROUND
Другие вопросы по тегам