【问题标题】:Use sudo inside Dockerfile (Alpine)在 Dockerfile (Alpine) 中使用 sudo
【发布时间】:2018-08-19 22:14:45
【问题描述】:

我有这个 Dockerfile ...

FROM keymetrics/pm2:latest-alpine

RUN apk update && \
    apk upgrade && \
    apk add \
       bash

COPY . ./

EXPOSE 1886 80 443

CMD pm2-docker start --auto-exit --env ${NODE_ENV} ecosystem.config.js

如何使用sudo 执行CMD 命令?

我需要这样做,因为端口 443 只允许 sudo 用户使用。

【问题讨论】:

  • 执行 CMD 时你仍然是 root。是什么让你认为事实并非如此?你能分享你用来启动你的容器的命令行吗?
  • Docker 本身以 root 身份运行,并且容器将默认为 root,除非您在镜像中设置了 USER,它不在基础镜像或 Dockerfile 中。你能解释一下你正在尝试做什么以及出了什么问题吗?有错误信息吗?
  • @ChristopheSchmitz 我知道CMD命令被执行了,我的问题是如何用sudo执行他
  • @Matt 我需要使用sudo 权限执行pm2 命令,因为我需要使用端口443 运行它。在我的机器上本地我可以使用命令sudo pm2 sart 运行pm2,但要部署我正在使用 docker 的应用程序,我也需要使用 sudo 运行 pm2 命令
  • 执行 CMD 时您已经是 root。 sudo 在那里帮不上忙。

标签: linux docker docker-compose dockerfile pm2


【解决方案1】:

su-exec 可以在 alpine 中使用。 将其添加到包中,如果还没有,请将以下内容添加到您的 Dockerfile 中

RUN apk add --no-cache su-exec

在您将在 docker 中运行的脚本中,您可以使用以下命令成为另一个用户:

exec su-exec <my-user> <my command>

或者,您可以在构建 docker-file 时添加更熟悉的 sudo 包 将以下内容添加到来自 alpine 的 Dockerfile 中

RUN set -ex && apk --no-cache add sudo

之后就可以使用sudo了

sudo -u <my-user> <my command>

【讨论】:

  • su-exec 在我的高山容器中不可用。我不得不修改它的 Dockerfile 以包括:RUN apk add --no-cache su-exec。 sudo 没有帮助我,因为它要求输入我不知道的用户密码。
【解决方案2】:

Sudo 通常不附带 Alpine 映像,将其包含在任何容器中几乎没有意义。您需要的不是绑定到低编号端口的 sudo,而是 root 用户本身,而 sudo 只是在多用户环境中获取 root 访问权限的常用方法。如果容器包含 sudo,您将需要使用密码设置用户,或者允许命令在没有密码的情况下运行。无论您选择哪种方式,您现在都可以在容器内进行权限提升,从而破坏了以普通用户身份运行容器的目的,因此您此时还不如以 root 身份运行容器。

如果上游镜像被配置为以非 root 用户身份运行(不太可能,因为您在构建期间运行了apk 命令),您可以在 Dockerfile 中指定USER root,并且以下所有步骤都将以 root 身份运行默认,包括容器入口点/cmd。

如果您以其他用户身份启动容器,例如docker run -u 1000 your_image,然后以 root 身份运行您的命令,您将删除 -u 1000 选项。如果您在限制容器以非 root 用户身份运行的更高安全性环境中运行容器,这可能是一个问题。

如果您的应用程序本身正在放弃 root 权限,那么包括 sudo 不太可能没有帮助,除非应用程序本身在内部调用了 sudo。如果是这种情况,请在绑定到端口后更新应用程序以删除 root 权限。

最重要的是,如果在容器中设置 root 的唯一原因是绑定到低编号端口,那么将容器内的应用程序配置为绑定到高编号端口,例如8080和8443。你可以把这个容器端口映射到宿主机上的任意端口,包括80和443,这样外界看不到任何影响。例如。 docker run -p 80:8080 -p 443:8443 your_image。这可以简化您的映像(删除 sudo 等工具)并同时提高您的安全性。

【讨论】:

  • 谢谢!有时我们正在寻找的并不是我们真正需要的。对我来说就是这种情况,您的解释对我帮助很大!
  • 很棒的答案,我不知道更高数量的端口不需要root权限。
猜你喜欢
  • 2020-09-21
  • 2022-06-30
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多