【问题标题】:Docker Spawn a shell as a user instead of rootDocker 作为用户而不是 root 生成一个 shell
【发布时间】:2018-08-07 15:48:57
【问题描述】:

通常当我使用 docker 容器作为开发测试基础开发应用程序时,我需要通过以下命令在其中手动运行 composer、phpunit、npm、bower 和各种开发脚本:

docker exec -ti /bin/sh

但是当 shell 被生成时,是用 root 权限生成的。我想要实现的是生成一个没有 root 权限但具有指定用户的 shell。

我该怎么做?

在我的情况下,我的Dockerfile 具有以下条目:

FROM php:5.6-fpm-alpine

ARG UID="1000"
ARG GID="1000"

COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
COPY ./fpm.conf /usr/local/etc/php-fpm.d/zz-docker.conf


RUN chmod +x /usr/local/bin/entrypoint.sh &&\
    addgroup -g ${GID} developer &&\
    adduser -D -H -S -s /bin/false -G developer -u ${UID} developer


ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]

我将我从主机开发的项目目录挂载到/var/www/html 并保留用户权限,因此我只需要以下docker-compose.yml 即可构建它:

version: '2'
services:

 php_dev:
  build:
   context: .
   dockerfile: Dockerfile
   args:
     XDEBUG_HOST: 172.17.0.1
     XDEBUG_PORT: 9021
     UID: 1000
     GID: 1000
  image: pcmagas/php_dev
  links:
    - somedb
  volumes:
    - "$SRC_PATH:/var/www/html:Z"

通过将 UIDGID 设置为我的主机的用户 ID 和组 ID 并使用以下配置格式 fpm 来实现:

[global]
daemonize = no

[www]
listen = 9000
user = developer
group = developer

我设法对我的代码进行任何更改,而不必担心对用户兴趣的神秘更改。但我希望能够以开发者用户身份在运行的php_dev 容器内生成一个shell,以便将来的任何工具(如composernpm)都将以适当的用户权限运行。

当然,我想同样的原则也适用于其他语言以及 python 的示例pip

【问题讨论】:

  • 您是否尝试在入口点之前添加此行? USER developer
  • 那你为什么不能以另一个用户的身份运行composernpmsu 命令很容易运行。
  • @Mike 直接以用户身份运行shell更方便。
  • @Mostafa Hussein 您的解决方案似乎有效。
  • @DimitriosDesyllas 我已经提交了完整的答案以及您可能需要的更多解释

标签: docker containers root


【解决方案1】:

最后放一行:

USER developer

当您通过以下方式生成 shell 时确实有效:

docker exec -ti /bin/sh

【讨论】:

    【解决方案2】:

    如果您需要以非 root 用户身份运行容器,您必须将以下行添加到您的 Dockerfile

    USER developer
    

    请注意,要通过docker-compose.yml 挂载目录,您必须在运行docker-compose up 之前通过执行以下命令更改该目录的权限

    chown UID:GID /path/to/folder/on/host
    

    UIDGID 应该匹配用户容器的 UIDGID。 这将使用户能够毫无问题地读取和写入已安装的卷

    阅读更多关于 USER 指令的信息

    【讨论】:

    • 好吧,我使用相同的用户 ID,组来自主机,这就是为什么我将它们作为构建参数传递,以便在我的容器内拥有一个 mapped 用户,与在外部运行的用户相同; )
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2015-07-10
    相关资源
    最近更新 更多