是否可以从另一个容器启动已停止的容器

ton*_*919 12 docker docker-container

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

lar*_*sks 23

可以授予对docker的容器访问权限,以便它可以在主机上生成其他容器.您可以通过在容器中公开docker socket来实现此目的,例如:

docker run -v /var/run/docker.sock:/var/run/docker.sock --name containerB myimage ...
Run Code Online (Sandbox Code Playgroud)

现在,如果您docker在容器中有客户端,您将能够控制主机上的docker守护程序并使用它来生成"容器A".

在尝试此方法之前,您应该了解安全注意事项:访问docker与root在主机上访问相同,这意味着如果您的Web应用程序有远程攻击,您只需将密钥交给主机攻击者.本文将对此进行更全面的描述.


Ber*_*ard 12

可以通过安装docker插座来实现.

容器A
它会将时间打印到标准输出(及其日志)并退出.

docker run --name contA ubuntu date
Run Code Online (Sandbox Code Playgroud)

容器B
诀窍是安装主机的docker socket然后在容器上安装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"
Run Code Online (Sandbox Code Playgroud)

您可以通过查看其日志来查看contA

docker logs contA
Run Code Online (Sandbox Code Playgroud)

也就是说,Docker真的意味着长期运行的服务.在Docker github上有一些关于为维护,cron作业等指定短期"工作"服务的问题,但没有任何决定,更不用说编码了.因此,最好构建您的系统,以便容器能够正常运行并保持稳定.

  • 它有效,但代码对我来说不是很清楚。我对 https://get.docker.com/ 的使用感到困惑。无论如何,必须在 docker 容器内安装 docker-ce ( apt-get install docker-ce ),然后使用“docker restart containername”重新启动另一个 docker 容器 (2认同)