在Docker中根和非Root用户之间切换

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

我知道我可以使用Docker的USERfunction,但是根据用户的不同,我也会尝试运行su - postgres但是返回一个错误,说明命令必须来自terminal。

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

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

如果容器是基于官方Postgres映像的 ,那么可以尝试为所有root任务创build脚本,并将该脚本COPY到容器的/docker-entrypoint-initdb.d文件夹中。 这个文件夹中的任何.sql.sh脚本将在入口点调用initdb 之后执行,使用gosu postgres在入口点脚本中看到。

如果你需要在两组root之间夹入initdb ,那么你将不得不雕刻自己的入口脚本。