在Docker映像中运行多个脚本

时间:2019-01-17 22:09:10

标签: bash docker dockerfile

嗨,我想知道是否可以在docker container start上自动同时自动运行两个脚本。第一个脚本必须运行客户端应用程序,第二个脚本要运行服务器应用程序作为后台。

3 个答案:

答案 0 :(得分:1)

您可以use CMD in your Dockerfileuse command & to run two command in parallel

CMD server_command & client_command

(其中server_command是用于启动服务器的命令,而client_command是用于启动客户端的命令)

答案 1 :(得分:1)

Docker对此的官方立场始终是,最好仅在容器中运行单个服务。话虽如此,他们还维护着非常强大的文档,远远超出了将多个服务整合到一个容器中的可能解决方案。

https://docs.docker.com/config/containers/multi-service_container/

一个简短的摘要就是,当您拥有多个服务时,需要具有某种类型的“ init”过程来充当容器中所有服务的父级。

有两种方法可以做到这一点:

  1. 具有一个将每个服务作为后台作业运行的shell脚本。
  2. 在容器内部启动完整的init系统,并在此系统下启动服务。

两者都有问题。首先是因为bash并不是init系统,当bash表现不佳时,您可能会遇到各种各样的麻烦。第二个原因是,将init系统放入docker容器是一件很繁重的事情。

说了这么多,最好的解决方案是将服务分成两个容器。

答案 2 :(得分:1)

如前所述,建议不要进行多个过程。

但是,在某些情况下,需要具有多个进程。在这种情况下,通常的方法是使用supervisor之类的流程管理器。