【问题标题】:How to make a docker entrypoint run as non-root for some particular commands only如何使 docker 入口点仅针对某些特定命令以非 root 身份运行
【发布时间】:2019-03-25 23:45:04
【问题描述】:

我的 PHP 图像入口点如下所示。入口点作为 root 运行,在我的情况下它是必要的。因此,我在容器上运行的任何命令都以 root 身份运行。对于某些特定的命令,我想以另一个用户身份运行它,例如当有人尝试执行 docker exec -it php composer install composer 应该作为入口点中设置的另一个用户运行。当有人试图执行docker exec -it php drush status drush 应该作为入口点中设置的另一个用户运行。入口点内的 if 或 switch 语句可能对我有帮助。我正在尝试类似https://unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command 但使用双破折号 (--) 传递参数会破坏一些命令。

Dockerfile

COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]

入口点.sh

#!/bin/sh

set -e

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- php-fpm "$@"
fi

exec "$@"

【问题讨论】:

    标签: shell docker composer-php entry-point


    【解决方案1】:

    我不确定我是否了解您的用例,但我使用su-exec 在我的入口点脚本中将权限降低到非 root 用户。最常见的是我必须使用它,因为我需要更改绑定安装卷的权限(通常是/var/run/docker.sock)。

    基本上我会在我的入口点执行根级别操作,然后在执行容器服务时下拉到非根用户。

    本博客使用gosu 解释了这个概念,su-execgosu 在 C 中的重构,即 10kb 与 1.8MB:https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

    请注意security issues,在容器中使用它时AFAIK are not a factor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多