【问题标题】:docker confusion between internal and external users内部和外部用户之间的 docker 混淆
【发布时间】:2021-08-29 02:40:49
【问题描述】:

所以 - 我正在内部使用 apache2 构建一个 docker 容器 - 但我遇到了权限问题,我不知道如何解决它......

如果我在没有 --user 规范的情况下运行容器,它运行良好 - 但我希望 在外部 能够将其分配给用户并将该用户限制为只能读取和写入特定目录(我使用 -v 映射的目录)。

但是,当我使用 --user 向该用户运行 docker 容器时,外部权限似乎都是正确的 - 但在内部 - apache2 然后砰的一声说它无法绑定到端口 80 - 并且其他事情无法在内部写入代码.

我如何映射用户 - 例如映射端口或卷。我想要实现的是容器外部只有外部系统中用户X的权限-但内部它是root,以root用户id运行等等。

【问题讨论】:

    标签: docker


    【解决方案1】:

    实现externally only has the permissions of user X in the outer system - but internally it's root 的一种可能方法是使用sudo

    创建一个“内部”用户,其 UID 应与“外部”用户相同:

    FROM alpine
    RUN apk add --no-cache apache2 sudo \
      && adduser -S newuser -s /bin/ash -D -H -u 1000 \
      && echo "newuser ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/newuser \
      && chmod 0440 /etc/sudoers.d/newuser
    USER newuser
    EXPOSE 80
    ENTRYPOINT ["bin/ash","-c","sudo httpd -DFOREGROUND"]
    

    主机上有一个用户专用目录的示例:

    drwx------ 2 ec2-user ec2-user 24 Aug 29 11:53 html
    

    目录可以照常挂载:

    docker built -t myapache2 .
    docker run -it -v ${PWD}/html:/html -p 8080:80 myapache2
    
    docker exec -t 31c6cc627813 ls -l /html
    total 4
    -rwx------    1 ec2-user 1000            58 Aug 29 03:53 index.html
    
    curl localhost:8080
    <html><body><h1>It works!</h1></body></html>
    

    这里使用的是 Alpine,但您当然可以使用任何适合您需要的发行版。

    注意:httpd 站点和文件夹权限是另一个主题,此处不涉及。

    【讨论】:

    • newuser 具有不受限制的 root 等效权限(在容器内),只要它在每个命令前加上 sudo。从安全角度来看,这与仅以 root 身份运行没有什么不同,实际上在这种情况下,Apache 进程确实以具有完全权限的 root 身份运行。
    • 谢谢 - 这听起来像我想要的 - 会试一试
    猜你喜欢
    • 2011-08-27
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2012-03-27
    相关资源
    最近更新 更多