gpt4 book ai didi

docker - 如何在 Docker 容器中以非 root 用户身份启动 crond?

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:56 25 4
gpt4 key购买 nike

我正在使用下面的 Dockerfileentrypoint.sh。我需要以非 root 用户身份在容器中启动 crond 服务,但我得到了 Permission denied。如何以非 root 用户身份启动 crond 服务?

我需要在 Dockerfile 中有 USER,因为它是我的 Openshift 3 平台中的强制管理设置。

Docker 文件

FROM centos:centos7.4.1708
RUN yum update -y && yum install -y cronie && rm -rf /var/lib/apt/lists/*
RUN cd / && mkdir /code
ADD entrypoint.sh /code/
RUN chmod -R 755 /code/entrypoint.sh
ENTRYPOINT ["/code/entrypoint.sh"]
RUN useradd -l -u 1001510000 -c "1001510000" 1001510000
USER 1001510000
CMD ["top"]

入口点.sh

#!/bin/bash
echo "in the entrypoint!"
echo "executing id"
id
echo "executing crond start"
crond start
echo "executing $@"
$@

错误输出

in the entrypoint!
executing id
uid=1001510000(1001510000) gid=1000(1001510000) groups=1000(1001510000)
executing crond start
crond: can't open or create /var/run/crond.pid: Permission denied
executing top

最佳答案

首先,crond 必须代表其他用户调用命令。如果不是由 root 运行,它怎么能做到这一点?即使您以某种方式与该用户一起运行这个恶魔进程,它也很可能缺少其他权限才能运行某些命令。

但我想你可以试试,也许这会有所帮助:

如错误日志所述,您的用户根本没有权限。如果你想尝试以非root用户身份运行创建组让我们说crond-users并更改/var/run/crond.pid组从 rootcrond-users。最后但同样重要的是,将您的用户添加到 crond-users 组。像这样:

RUN groupadd crond-users && \
chgrp crond-users /var/run/crond.pid && \
usermod -a -G crond-users 1001510000

命中 1

此外,docker 默认入口点是 /bin/bash -c 但没有默认命令。所以您的 Dockerfile 可能如下所示:

FROM centos:centos7.4.1708
RUN yum update -y && yum install -y cronie && rm -rf /var/lib/apt/lists/* && \
cd / && mkdir /code && \
chmod -R 755 /code/entrypoint.sh && \
useradd -l -u 1001510000 -c "1001510000" 1001510000 && \
addgroup crond-users && \
chgrp crond-users /var/run/crond.pid && \
usermod -a -G crond-users 1001510000

ADD entrypoint.sh /code/
USER 1001510000

CMD ["/code/entrypoint.sh", "top"]

提示 2.

尽量避免多次使用相同的 Dockerfile 指令(在您的情况下,您有 4 次 RUN)。每条指令在以后的构建镜像中都是一个单独的层。这是众所周知的Dockerfile best practice .

Minimize the number of layers In older versions of Docker, it was important that you minimized the number of layers in your images to ensure they were performant. The following features were added to reduce this limitation:

In Docker 1.10 and higher, only the instructions RUN, COPY, ADD create layers. Other instructions create temporary intermediate images, and do not directly increase the size of the build.

关于docker - 如何在 Docker 容器中以非 root 用户身份启动 crond?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com