我有一个简单的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.
答案 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)
默认情况下,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