我正在尝试通过docker-image在openshift上安装jira-server。
我从windows的docker- from中提取了图像。添加了简单的dockerfile,包括用户、ROOT等。
在尝试部署pod时。我得到了错误,pod进入循环。错误是:不同位置的权限错误。多次尝试重新定位jira-home目录,但均未成功。
(尝试在封闭网络上安装)
感谢您的帮助!
发布于 2020-07-19 19:44:43
简短的回答
官方的亚特兰大图像与Kubernetes Derivative /e.g。Openshift不兼容,因为它们违反了一些关键概念。例如,在Openshift中,容器使用任意的用户is运行,这意味着一个没有名字的用户正在执行容器中的进程。这是一种安全机制,可防止容器以root身份运行,并限制从容器中逃脱的风险,从而获得群集主机上的权限。
解决方案
您确实需要从头开始重新构建映像。
此外,需要删除启动python脚本试图修改文件系统权限的行为。
https://bitbucket.org/atlassian-docker/docker-atlassian-jira/src/master/
RUN groupadd --gid ${RUN_GID} ${RUN_GROUP} \
...
&& chown -R ${RUN_USER}:${RUN_GROUP} ${JIRA_HOME} \
# make the image compatible to run as an arbitrary uid
&& chgrp -R 0 /etc/container_id \
&& chmod -R g=u /etc/container_id \
&& chmod -R 460 /etc/container_id \
&& chgrp -R 0 ${JIRA_INSTALL_DIR} \
&& chmod -R g=u ${JIRA_INSTALL_DIR} \
&& chgrp -R 0 ${JIRA_HOME} \
&& chmod -R g=u ${JIRA_HOME}entrypoint_helpers.py中的gen_cfg函数,并删除末尾的else子句。已在step2中设置了必要的权限。def gen_cfg(tmpl, target, user='root', group='root', mode=0o644, overwrite=True):
if not overwrite and os.path.exists(target):
logging.info(f"{target} exists; skipping.")
return
logging.info(f"Generating {target} from template {tmpl}")
cfg = jenv.get_template(tmpl).render(env)
try:
with open(target, 'w') as fd:
fd.write(cfg)
except (OSError, PermissionError):
logging.warning(f"Container not started as root. Bootstrapping skipped for '{target}'")
# else:
# set_perms(target, user, group, mode)使用--build-arg JIRA_VERSION= --build-arg ARTEFACT_NAME
细节检查
启动atlassian映像,用户root是第一个进入的,正在进行修改(chown...)然后下拉到用户"jira“。所有这些操作在openshift中都是不可能的。在大多数情况下,从官方镜像开始构建一个新的Dockerfile,并在部署到集群之前修改所需文件和文件夹的权限是解决方案,但更糟糕的是,atlassian选择将必要的目录“挂载”为卷。
他们甚至在评论中提到了这个问题。
VOLUME ["${JIRA_HOME}"] # Must be declared after setting perms卷挂载后,权限只能在运行时永久修改。这会强制它们在容器启动后使用entrypoint_helpers.py中的python函数重新构建并设置权限。这也是容器失败的地方,出现了几个“权限被拒绝”。
我很乐意在这上面发布一个拉取请求,但不幸的是他们被托管在bitbucket上。
https://stackoverflow.com/questions/59555279
复制相似问题