我的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 "$@"
答案 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。