我怎样才能协调两个相互依赖的docker集装箱的启动和重新启动?

我使用docker容器作为Jenkins CI服务器的数据卷。 因此,要启动Jenkins服务,我需要运行两个连续的命令:

docker run --name=jenkins_data -v /path/to/volume/:/var/jenkins_home busybox docker run -d --name=jenkins_server -p 8081:8080 --volumes-from jenkins_data --restart="always" jenkins 

我怎样才能协调这两个容器,使他们自动(重新)启动? 如何确保jenkins_data容器在启动jenkins_server之前运行?

我试着为jenkins_data容器设置--restart="always" ,但是因为它在第一个docker run命令之后立即退出,所以它每隔几秒钟就会重新运行一次。

从本质上讲,我想把这两个容器当作一个在服务器启动时自动启动的服务。

首先,你不使用数据专用容器。 由于您实际上正在安装一个主机卷,因此您的数据容器实际上不会购买任何东西:您可以使用-v /path/to/volume:/var/jenkins_home命令行选项。

其次,您不需要“启动”数据容器,以便在--volumes-from引用它。 考虑:

 docker run --name mydata -v /data busybox true 

这个容器立即退出(因为我们正在运行)。 但现在我可以做到这一点:

 docker run --volumes-from mydata -it busybox sh 

我可以从mydata容器中看到/data卷:

 / # df -P |grep data /dev/mapper/tank-docker 10190136 357972 9815780 4% /data 

这意味着你实际上不需要担心启动多个容器。 只要你的数据容器存在 ,你可以在Jenkins容器中的--volumes-from中引用它。