gpt4 book ai didi

shell - 如何使 docker 入口点仅针对某些特定命令以非 root 身份运行

转载 作者:行者123 更新时间:2023-12-05 03:04:29 24 4
gpt4 key购买 nike

我的 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但是用双破折号 (--) 传递参数会破坏一些命令。

docker 文件

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 "$@"

最佳答案

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

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

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

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

关于shell - 如何使 docker 入口点仅针对某些特定命令以非 root 身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52920215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com