OpenShift3 Pro不运行在minishift上本地运行的简单Centos映像

时间:2017-07-24 20:10:44

标签: openshift redhat-containers

我有一个简单的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容器开发工具包(CDK)的Web控制台并从dockerhub部署映像,它可以正常工作。如果我进入OpenShift3 Pro Web控制台,则pod会进入崩溃循环。控制台或命令行上没有日志来诊断问题。任何帮助非常感谢。

为了尝试仅查看Centos7是否存在问题,我将第一行更改为centos:7,并再次将其用于minishift CDK,但不适用于OpenShift3 Pro。它确实在pod的日志选项卡上显示了一些内容:

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 个答案:

答案 0 :(得分: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

如果您想尝试自定义它,也可以创建派生图像。

无论哪种方式,如果想要建立自己的,都要看看它是如何实现的。

答案 1 :(得分:0)

来自https://docs.openshift.com/container-platform/3.5/creating_images/guidelines.html#openshift-container-platform-specific-guidelines的redhat企业文档:

  

默认情况下,OpenShift Container Platform使用。运行容器   任意分配的用户ID。这提供了额外的安全性   反对由于容器引擎而逃离容器的进程   漏洞,从而实现主机上升的权限   节点。对于支持作为任意用户运行的映像,目录   和图像中的进程可能写入的文件应该是   由根组拥有并由该组读/写。文件到   被执行也应具有组执行权限。

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

因此,在这种情况下,在OpenShift 3 Online Pro上运行的修改后的Docker文件是:

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