openshift pod 用户权限设定


openshift v3 设计默认不允许在pod中使用root,在启动pod时会给一个uid值,这两天发现这个uid值是固定的,但是不同用户的uid值不相同.
这个可不可以理解为pod在启动的时候,使用了类似 docker run -u 这个参数去run容器的呢?
这样就出现了一个问题。
在dockerfile中 指定了USER 并且CMD 一个脚本,pod启动后,CMD运行的脚本是以这个uid来启动的,不是指定的USER来启动,由于权限问题导致启动失败。
例如
FROM registry.access.redhat.com/rhel7
MAINTAINER charles zhang

yum&&repo

RUN curl http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm -O && \
rpm -ivh epel-release-7-5.noarch.rpm && \
yum --enablerepo=epel install nss_wrapper gettext  git unzip pwgen  mariadb --nogpgcheck -y && \
useradd -d /app -u 10001 tomcat && \
git clone http://xxxxxx.git && \
mv portal-dockerbasicfile-devops/app /app && \
mv /app/app/* /app && \
yum install /app/jdk-8u65-linux-x64.rpm --nogpgcheck -y && yum clean all && \
chown tomcat:tomcat /app -R
USER tomcat

set env

ENV TOMCAT_MAJOR_VERSION 7
ENV TOMCAT_MINOR_VERSION 7.0.55
ENV CATALINA_HOME /app/apache-tomcat-7.0.55

set jdk env

ENV JAVA_HOME /usr/java/jdk1.8.0_65
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV MYSQL_HOSTNAME database
ENV MYSQL_ROOT_PASSWORD 123456

RUN unzip /app/apache-tomcat-7.0.55/webapps/dashboard.war -d /app/apache-tomcat-7.0.55/webapps/dashboard && \
chmod 777 /app -R

VOLUME ["/app"]

CMD ["/app/script/run.sh"]
EXPOSE 8080


在build完成之后,tomcat 启动时会报错,war中文件找不到,war包提前解压过了,并且赋值为777,手动rsh进入pod 切换到tomcat用户,启动成功

官方在docs文档中
https://access.redhat.com/docu ... ages/

推荐使用nss_wraper 去把openshift 给予的uid值设置为dockerfile的USER的uid,我添加了这段代码到启动脚本中,发现问题依旧。

希望能给予解决思路,多谢
已邀请:

uptoknow - 80 IT男

赞同来自:


没有这种权限可以修改

uptoknow - 80 IT男

赞同来自:

  1. 最好不要让你的程序用root权限运行,你可以修改你的Dockerfile让其可以以任何用户运行,openshift用SCC控制pod的运行权限
  2. 你可以修改SCC让你的pod可以以你Dockerfile指定的用户运行

zhanglianx111 - 一句话介绍

赞同来自:


我也遇到了同样的问题,有人解决了吗?

要回复问题请先登录注册