所以我试图在Minikube上部署Django应用程序。但是在其中一个容器中,图像要求我在root
中执行某些任务,然后切换postgres
用户创建一些数据库,然后切换回root
以运行更多命令
我知道我可以使用Docker的USER
功能,但这取决于我所处的用户是否会影响某些任务。我也尝试过运行su - postgres
但是会返回错误说该命令必须来自终端。
有关如何解决此问题的任何想法?
答案 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
任务之间,那么您将需要创建自己的入口点脚本。