我只是基于nginx官方映像编写了一个包含CMD["uwsgi", "--ini", "uwsgi.ini"]
的自定义容器dockerfile
我看到此nginx官方映像的Dockerfile末尾有一个CMD["nginx", "-g", "daemon off"]
。
这应该意味着在容器启动时启动nginx。
因此,我在dockerfile中的CMD["uwsgi", "--ini", "uwsgi.ini"]
将覆盖它,因此容器将立即退出。
我怎么不应该覆盖它并使nginx和uwsgi都能正常工作?
我在Google上搜索了很多,但是这些解决方案都不基于nginx官方图像。 显然,我可以为uwsgi运行另一个容器并将其连接到nginx容器(即,由nginx官方图像运行的容器),但是我认为这很麻烦且不必要。
答案 0 :(得分:0)
您可以使用ENTRYPOINT
或CMD
通过提供一个shell脚本/包装器来在容器内运行多个进程。您应该尝试避免这样做,因为这不是最佳做法。单个容器应负责管理单个过程。
但是,有一种解决方法可用来管理容器内的多个进程,即使用 shell脚本包装器或 supervisor 。
在官方文档中-
https://docs.docker.com/config/containers/multi-service_container/
答案 1 :(得分:0)
首先,这不是在一个容器中运行2个进程的docker哲学。 这是一种普遍接受的方法:officialy和through the community
因此,您宁愿使用nginx和应用程序构建堆栈。
如果您确实希望或需要按照自己的方式进行操作,则可以先pipe several command within the CMD instruction,如果您首先指定了命令外壳...但是也可以在此处使用script。 请记住,该脚本将在您的容器内执行,因此请从容器POV而不是宿主的角度考虑!