在Docker中切换根用户和非root用户

时间:2016-12-21 19:05:57

标签: docker kubernetes

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

我知道我可以使用Docker的USER功能,但这取决于我所处的用户是否会影响某些任务。我也尝试过运行su - postgres但是会​​返回错误说该命令必须来自终端。

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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