除了root之外,你如何运行Openshift Docker容器?

时间:2016-06-09 10:29:12

标签: docker openshift

我目前正在运行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"]

我多次遇到过类似的问题,它会说Permission Denied on file /supervisord.log之类的东西。或类似的东西。

如何设置它以便我的容器不以root身份运行所有命令?这似乎导致了我遇到的所有问题。

3 个答案:

答案 0 :(得分:9)

Openshift严格遵守自定义Docker构建的安全策略。

看看这个OpenShift Application Platform

特别是在FAQ部分的第4点,这里引用。

  

<强> 4。为什么我的Docker镜像不能在OpenShift上运行?

     

安全!默认情况下,Origin使用以下安全策略运行:

     

容器作为非root唯一用户运行,与其他系统用户分开   他们无法访问主机资源,运行特权或成为root用户   它们被赋予系统管理员定义的CPU和内存限制   他们访问的任何持久存储都将使用唯一的SELinux标签,以防止其他人看到他们的内容   这些设置是按项目设置的,因此默认情况下,不同项目中的容器无法相互查看   普通用户可以运行Docker,源代码和自定义构建   默认情况下,Docker构建可以(并且经常)以root身份运行。您可以通过构建/ docker和构建/自定义策略资源来控制谁可以创建Docker构建。   普通用户和项目管理员无法更改其安全配额。

     

许多Docker容器希望以root身份运行(因此编辑文件系统的所有内容)。图像作者指南提供了有关默认情况下使图像更安全的建议:

     

不要以root身份运行

     

将要写入的目录设置为group-writable并由group id 0拥有   如果需要绑定到端口&lt; 1024

,请在可执行文件上设置net-bind功能      

否则,您可以查看安全文档以获取有关如何放宽这些限制的说明。

我希望它有所帮助。

答案 1 :(得分:0)

在命令行oc cli工具上按顺序发出这两个命令时,您可以以任何用户身份运行docker,也可以运行root(而不是Openshift默认内置帐户UID - 1000030000 oc login -u system:admin -n default跟随oc adm policy add-scc-to-user anyuid -z default -n projectname,其中projectname是您在docker下分配的项目名称

答案 2 :(得分:0)

尽管您无权访问root,但您的OpenShift容器(可能)是root组的成员。然后,您更改一些目录/文件权限,以避免出现no privs错误。

如果您正在使用Dockerfile将映像部署到OpenShift,则可以添加以下RUN命令:

在Dockerfile中:

运行chgrp -R 0 / run && chmod -R g = u / run