0

我只是写了一个自定义的容器 dockerfile 包括CMD["uwsgi", "--ini", "uwsgi.ini"]基于 nginx 官方镜像

我看到CMD["nginx", "-g", "daemon off"]这个 nginx 官方镜像的 Dockerfile 末尾有一个。

这应该意味着在容器启动时启动 nginx。所以我CMD["uwsgi", "--ini", "uwsgi.ini"]的 dockerfile 将覆盖它,因此容器将立即退出。我应该如何不覆盖它并使 nginx 和 uwsgi 都工作?

我用谷歌搜索了很多,但这些解决方案都不是基于 nginx 官方图像。显然我可以为 uwsgi 运行另一个容器并将其连接到 nginx 容器(即由 nginx 官方镜像运行的容器),但我认为这很麻烦且没有必要。

nginx 官方图片在这里

4

2 回答 2

0

您可以通过提供 shell 脚本/包装器来使用ENTRYPOINT或在容器内运行多个进程。CMD您应该尽量避免这样做,因为这不是最佳做法。单个容器应该负责管理单个进程。

但是有一种解决方法,您可以通过它管理容器内的多个进程,即使用shell 脚本包装器supervisor
它在官方文档中 -
https://docs.docker.com/config/containers/multi-service_container/

于 2018-10-11T13:25:41.923 回答
0

首先,这不是在一个容器中运行 2 个进程的 docker 哲学。这是一个普遍接受的:官方的,通过社区的。

因此,您宁愿构建一个堆栈,同时包含 nginx 和您的应用程序。

如果您真的想要或需要按照自己的方式执行此操作,如果您首先指定命令外壳,则可以在 CMD 指令中通过管道传输多个命令......但您也可以在此处使用脚本
请记住,脚本将从您的容器中执行,因此请从容器 POV 而非主机 POV 中考虑!

于 2018-10-11T13:35:45.307 回答