首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docker中,su -www-data和sudo -u www-data有什么区别吗?

在docker中,su -www-data和sudo -u www-data有什么区别吗?
EN

Stack Overflow用户
提问于 2021-10-08 09:09:11
回答 1查看 102关注 0票数 0

我的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不是为高山码头安装的,所以我需要先安装它。

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 13:31:28

首先,您可能需要查看this

避免安装或使用sudo,因为它具有不可预测的TTY和可能导致问题的信号转发行为。如果您绝对需要类似于sudo的功能,比如以根用户身份初始化守护进程,但以非根用户身份运行它,请考虑使用"gosu“。

因此,对于您的场景,您可以只使用默认的USER root来运行Dockerfile,并且在docker-entrypoint.sh中仍然使用根用户来运行命令,而最后使用exec gosu xxx xxx来派生和替换旧进程。一个最小的例子:

文档文件:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/bin/bash
echo "show user before gosu:"
id
echo "show user after gosu:"
exec gosu www-data id

执行:

代码语言:javascript
复制
$ 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69493317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档