如何仅使某些特定命令以非root用户身份运行docker入口点

时间:2018-10-21 21:49:48

标签: shell docker composer-php entry-point

我的PHP映像入口点如下所示。入口点以 root 身份运行,在我的情况下这是必需的。因此,我在容器上运行的任何命令都将以root身份运行。对于某些特定命令,我想以其他用户身份运行它,例如,当某人尝试执行docker exec -it php composer install作曲家时,应以入口点中设置的另一个用户身份运行。当某人尝试执行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"]

entrypoint.sh

#!/bin/sh

set -e

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

exec "$@"

1 个答案:

答案 0 :(得分:0)

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

基本上,我将在入口点执行root级操作,然后在执行容器服务时下拉至非root用户。

此博客解释了使用gosu的概念,su-exec是C中gosu的重构,它是10kb vs 1.8MB:https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

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