如何在Docker Alpine镜像中使非root用户成为sudo用户?

11

我正在尝试使用基于Alpine的操作系统构建Cassandra Docker镜像。在容器运行过程中,由于我以Cassandra用户身份运行,所以我遇到了权限相关的问题。我无法使用sudo命令并将我的用户切换为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"]

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


请查看此链接 https://github.com/mhart/alpine-node/issues/48 - Vahid
1个回答

25

首先,您不需要将新创建的用户分配为root权限,这样会破坏用户的目的。

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

docker exec -it --user root mycontainer sh

或在Dockerfile中

USER root
# Run root operation here
# Change user back to cassandra
USER cassandra

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

Dockerfile

RUN adduser -D $USER && mkdir -p /etc/sudoers.d \
        && 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

构建输出

Step 9/11 : RUN whoami
 ---> Running in d52065213d2d
default
Removing intermediate container d52065213d2d
 ---> c1b526ea8342
Step 10/11 : RUN sudo whoami
 ---> Running in 5f4ddd11a5f2
root

3
有时需要创建一个高权限用户,以便强制某些工具在root用户下无法正常工作。 - Alexander Pravdin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接