如何在 docker alpine 映像中将非 root 用户设为 sudo 用户?

and*_*ndy 4 containers sudo sudoers docker alpine-linux

我正在尝试使用基于 alpine 的操作系统构建 cassandra docker 镜像。在容器运行过程中,我遇到了与权限相关的问题,因为我以 cassandra 用户身份运行。我无法运行 sudo 并将我的用户 cassandra 切换为 sudo 用户。下面是我的示例 docker 文件,仅显示与 sudo 用户相关的逻辑--

FROM alpine:latest
RUN apk --no-cache update \
    && apk --no-cache add sudo
copy run.sh /usr/local/
RUN addgroup -S cassandra && adduser -S cassandra -G cassandra
RUN chown -R cassandra:cassandra /home/cassandra/
RUN echo 'cassandra  ALL=(ALL) /bin/su' >>  /etc/sudoers
USER cassandra
ENTRYPOINT [ "sh","/usr/local/run.sh"]
Run Code Online (Sandbox Code Playgroud)

登录容器后,我无法执行任何与 sudo 相关的任务。

Adi*_*iii 10

首先,您不需要为新创建的用户分配 root 权限,这会杀死用户的目的。

所以您不需要将用户更改为root用户,您可以在正在运行的容器中使用root用户运行命令。

docker exec -it --user root mycontainer sh
Run Code Online (Sandbox Code Playgroud)

或在 Dockerfile 中

USER root
# Run root operation here
# Change user back to cassandra
USER cassandra
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以使用以下命令创建 root 用户

文件

RUN adduser -D $USER \
        && echo "$USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USER \
        && chmod 0440 /etc/sudoers.d/$USER
USER $USER
WORKDIR $HOME
RUN whoami
RUN sudo whoami
Run Code Online (Sandbox Code Playgroud)

构建输出

Step 9/11 : RUN whoami
 ---> Running in d52065213d2d
default
Removing intermediate container d52065213d2d
 ---> c1b526ea8342
Step 10/11 : RUN sudo whoami
 ---> Running in 5f4ddd11a5f2
root
Run Code Online (Sandbox Code Playgroud)

  • 有时需要为某个工具创建一个具有高权限的用户,而该工具在root用户下强行不起作用。 (3认同)