【问题标题】:Switching Between Root and Non-Root Users in Docker在 Docker 中切换 root 和非 root 用户
【发布时间】:2023-03-03 16:50:01
【问题描述】:

所以我正在尝试在 Minikube 上部署一个 Django 应用程序。但是在其中一个容器中,图像要求我在root 中执行某些任务,然后切换postgres 用户以创建一些数据库,然后再切换回root 以运行更多命令。

我知道我可以为 Docker 使用USER 功能,但这会根据我所在的用户而搞砸某些任务。我也尝试过运行su - postgres,但返回一个错误,说明该命令必须是从终端。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 缺少必要的信息,但简而言之——这不是 docker 的事情。这是操作系统的事情。您可以像往常一样在 shell 脚本中翻转用户。或者,为每个进程做一个容器,然后拆分 postgres。

标签: docker kubernetes


【解决方案1】:

这方面的典型工具是gosu。当包含在您的容器中时,您将运行gosu postgres $cmd,其中的命令是您需要运行的任何内容。如果这是您需要在入口点脚本末尾的容器中运行的唯一命令,那么您将使用exec gosu postgres $cmd。 gosu 页面包含您使用他们工具的原因的详细信息,主要原因是 TTY 和信号处理。请注意,他们自述文件的末尾还列出了一些值得考虑的其他替代方案。

【讨论】:

  • 我是在我的entrypoint.sh 中运行gosu,还是在我的Dockerfile 中运行它?
  • 没关系,我查看了更多文档,这非常完美,谢谢!
【解决方案2】:

如果说容器基于官方Postgres image,您可以尝试为您的所有root 任务和COPY 将该脚本创建到容器的/docker-entrypoint-initdb.d 文件夹中。此文件夹中的任何.sql.sh 脚​​本都将在入口点调用initdb之后执行,gosu postgres 如在entrypoint script 中所示。

如果您需要将initdb 夹在两组root 任务之间,那么您必须编写自己的入口点脚本。

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2021-04-10
    • 2017-07-03
    • 2019-04-22
    • 2014-04-01
    • 2018-07-06
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多