我的php脚本在docker中运行,我需要使用www-data user来运行它,所以在dockerfile的入口点中,我可以
su www-data -s /bin/sh -c "/usr/local/bin/php xxx"
或
sudo -u www-data "/usr/local/bin/php xxx"
我知道sudo和su之间一般区别,但是当切换到非root用户时有什么区别?
到目前为止,对我来说唯一的区别是sudo不是为高山码头安装的,所以我需要先安装它。
发布于 2021-10-08 13:31:28
首先,您可能需要查看this
避免安装或使用sudo,因为它具有不可预测的TTY和可能导致问题的信号转发行为。如果您绝对需要类似于sudo的功能,比如以根用户身份初始化守护进程,但以非根用户身份运行它,请考虑使用"gosu“。
因此,对于您的场景,您可以只使用默认的USER root来运行Dockerfile,并且在docker-entrypoint.sh中仍然使用根用户来运行命令,而最后使用exec gosu xxx xxx来派生和替换旧进程。一个最小的例子:
文档文件:
FROM debian
RUN set -eux; \
apt-get update; \
apt-get install -y gosu; \
rm -rf /var/lib/apt/lists/*;
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]docker-entrypoint.sh:
#!/bin/bash
echo "show user before gosu:"
id
echo "show user after gosu:"
exec gosu www-data id执行:
$ docker build -t abc:1 .
$ docker run --rm abc:1
show user before gosu:
uid=0(root) gid=0(root) groups=0(root)
show user after gosu:
uid=33(www-data) gid=33(www-data) groups=33(www-data)你也可以参考一些开源图片作为参考:redis & its entrypoint
https://stackoverflow.com/questions/69493317
复制相似问题