是否有可能从另一个容器启动一个停止的容器

有两个容器A和B.一旦容器A启动,一个进程将被执行,然后容器将停止。 容器B只是一个Web应用程序(如expressjs)。 是否可以从容器B中启动A?

可以授予docker的容器访问权限,以便可以在主机上产生其他容器。 通过在容器中暴露docker套接字来做到这一点,例如:

docker run -v /var/run/docker.sock:/var/run/docker.sock --name containerB myimage ... 

现在,如果你在容器中有docker客户端,你将能够控制主机上的docker守护进程,并用它来产生你的“容器A”。

在尝试这种方法之前,您应该了解安全考虑因素:对docker的访问与在主机上具有root访问权限相同,这意味着如果您的web应用程序存在远程攻击,则只需将主机的密钥交给攻击者。 这篇文章中有更详细的描述。

可以通过安装dockersockets。

集装箱A
它将打印标准输出(及其日志)的时间并退出。

 docker run --name contA ubuntu date 

容器B
诀窍是安装主机的docker套接字,然后在容器上安装docker客户端。 然后它将与守护进程交互,就像您使用主机中的docker一样。 一旦docker被安装,它只需每5秒钟重启一次容器A.

 docker run --name contB -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash -c " apt-get update && apt-get install -y curl && curl -sSL https://get.docker.com/ | sh && watch --interval 5 docker restart contA" 

你可以看到contA正在通过查看日志来调用

 docker logs contA 

也就是说,Docker实际上是指长时间运行的服务。 在Docker的github上有一些关于为诸如维护,cron作业等等指定短期“工作”服务的讨论,但是没有任何东西已经被决定,更不用说编码了。 所以build立你的系统是最好的,这样容器就可以继续使用了。