gpt4 book ai didi

Docker 多个入口点

转载 作者:IT老高 更新时间:2023-10-28 12:35:23 29 4
gpt4 key购买 nike

假设我有以下 Dockerfile:

FROM ubuntu

RUN apt-get update
RUN apt-get install -y apache2
RUN apt-get install -y mongod #pretend this exists

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2"]

ENTRYPOINT 命令使得 apache2 在容器启动时启动。当容器使用命令 service mongod start 启动时,我还希望能够启动 mongod。根据documentation但是,一个 Dockerfile 中必须只有一个 ENTRYPOINT。那么正确的方法是什么?

最佳答案

正如 Jared Markell 所说,如果你想在一个 docker 容器中启动多个进程,你必须使用 supervisor .您必须配置主管来告诉他启动您的不同进程。

我在这篇 blog post 中写过这个,但你有一个真正的nice article here详细说明如何以及为什么在 Docker 中使用 supervisor。

基本上,您会想要执行以下操作:

FROM ubuntu

RUN apt-get update
RUN apt-get install -y apache2
RUN apt-get install -y mongod #pretend this exists
RUN apt-get install -y supervisor # Installing supervisord

ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE 80

ENTRYPOINT ["/usr/bin/supervisord"]

并添加配置文件supervisord.conf

[supervisord]
nodaemon=true

[program:mongodb]
command=/etc/mongod/mongo #To adapt, I don't know how to launch your mongodb process

[program:apache2]
command=/usr/sbin/apache2 -DFOREGROUND

编辑:由于这个答案得到了很多人的支持,我想准确地警告一下,使用 Supervisor 被认为是最佳实践 运行多个作业。相反,您可能有兴趣为您的不同进程创建多个容器并通过 docker compose 管理它们。 .简而言之,Docker Compose 允许您在一个文件中定义应用所需的所有容器,并在一个命令中启动它们。

关于Docker 多个入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805073/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com