簡體   English   中英

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

[英]How do you run an Openshift Docker container as something besides 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"]

我曾經多次遇到類似的問題,它會Permission Denied on file /supervisord.log或類似的東西Permission Denied on file /supervisord.log說出Permission Denied on file /supervisord.log東西。

如何設置它以便我的容器不以root身份運行所有命令? 這似乎導致了我所遇到的所有問題。

Openshift嚴格遵守自定義Docker構建的安全策略。

看看這個OpenShift應用程序平台

特別是在FAQ部分的第4點,這里引用。

4.為什么我的Docker鏡像不能在OpenShift上運行?

安全! 默認情況下,Origin使用以下安全策略運行:

容器作為非root唯一用戶運行,與其他系統用戶分開他們無法訪問主機資源,運行特權或成為root用戶他們被給予系統管理員定義的CPU和內存限制他們訪問的任何持久存儲都將是唯一的SELinux標簽,阻止其他人看到他們的內容這些設置是每個項目,因此默認情況下不同項目中的容器無法相互查看常規用戶可以運行Docker,源和自定義構建默認情況下,Docker構建可以(並且經常)運行作為根。 您可以通過構建/ docker和構建/自定義策略資源來控制誰可以創建Docker構建。 普通用戶和項目管理員無法更改其安全配額。

期望許多Docker容器以root身份運行(因此編輯文件系統的所有內容)。 圖像作者指南提供了有關默認情況下使圖像更安全的建議:

不要以root身份運行

使您想要寫入的目錄成為可寫組並由組ID擁有0如果需要綁定到端口<1024,請在可執行文件上設置net-bind功能

否則,您可以查看安全文檔以獲取有關如何放寬這些限制的說明。

我希望它有所幫助。

雖然您無權訪問root,但默認情況下,您的OpenShift容器是根組的成員。 您可以更改某些目錄/文件權限以避免“ Permission Denied錯誤。

如果您使用Dockerfile將映像部署到OpenShift,則可以將以下RUN命令添加到Dockerfile:

RUN chgrp -R 0 /run && chmod -R g=u /run

這會將/ run目錄中的所有內容組更改為根組,然后將所有文件的組權限設置為等同於文件的所有者(組等於用戶)。 實質上,根組中的任何用戶都具有與每個文件的所有者相同的權限。

您可以以任何用戶身份運行docker,也可以是root(而不是Openshift默認內置帳戶UID - 1000030000在命令行上按順序發出這兩個命令時可以使用oc cli工具oc login -u system:admin -n default with oc adm policy add-scc-to-user anyuid -z default -n projectname其中projectname是您在oc adm policy add-scc-to-user anyuid -z default -n projectname分配的項目名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM