Docker 容器的哲学是一个 Docker 容器只运行一个进程。

但如果需要在一个容器内运行多个进程或服务,可以采取将入口文件设置为 Bash Shell 脚本,在脚本内运行多个程序的方式。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# start 1
start1 > /var/log/start1.log 2>&1 &
# start 2
start2 > /var/log/start2.log 2>&1 &

# just keep this script running
while [[ true ]]; do
sleep 1
done

在 Dockerfile 的入口中运行 run.sh:

1
2
3
4
FROM ubuntu:latest
...
COPY ./run.sh /
ENTRYPOINT ["run.sh"]