使用Docker在Alpine Linux上运行两个程序

10

我正在尝试使用alpine linux创建docker镜像,运行后会创建一个包含2个正在运行程序的容器。这2个程序(在我看来 - 我不太了解docker)不能分开,因为第一个程序会更改第二个程序的配置文件,然后应该也会重新启动该程序。

我不知道如何运行这2个程序。我添加了自己的脚本来运行这些程序,但我缺少某些东西 - 脚本有2行,每行是要运行该程序的命令 - 它只启动第一个程序。

在ubuntu中,我可以使用python子进程和systemctl命令重新启动运行服务,但在alpine linux中,它作为程序运行,我不知道如何重新启动/重新加载它。

2个回答

39

我建议看看 supervisord 的方法。您可以在docker文档中找到如何使用它。

以下是一些示例:

1. Dockerfile 如下:

FROM alpine:latest
RUN apk update && apk add --no-cache supervisor openssh nginx
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

2. supervisord.conf 是:

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:nginx]
command=nginx -c /etc/nginx/nginx.conf

2
在这个Dockerfile中,RUN mkdir -p /etc/supervisor.d的目的是什么?在http://supervisord.org/的链接中没有看到它。 - Elijah Lynn

4
你需要在后台运行第一个程序,以便执行脚本的第二行。
每当您有两个必须在一个容器内运行的进程时,存在 僵尸进程的风险(即容器无法正确传递SIGKILL信号给所有进程)。使用 phusion/baseimage-docker作为基础镜像:它是用于管理多个进程的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接