2016-12-04 184 views
1

我需要从另一个容器内启动,停止和重新启动容器。从其他容器启动和停止码头容器

例如:

容器A - >启动容器B

容器A - >停止容器C

我Dockerfile:

FROM node:7.2.0-slim 

WORKDIR /docker 
COPY . /docker 
CMD [ "npm", "start" ] 

Docker Version 1.12.3 

欲避免使用SSH连接。有任何想法吗?

回答

2

本身的容器运行在隔离环境中(例如,用它自己的文件系统或网络协议栈),并且因此没有直接的方式与它上运行的主机进行交互。这当然是为了实现真正的隔离。

但有一种方法可以运行具有更多权限的容器。要与主机上的docker守护进程交谈,可以将主机系统的docker套接字安装到容器中。这与您可能将某个主机文件夹安装到容器中的方式相同。

docker run -v /var/run/docker.sock:/var/run/docker.sock yourimage 

举一个例子,请看这是listenes启动和主机上停止容器激活一些代理路线,它们的方法的traefik代理的泊坞窗,撰写文件。您可以找到示例in the traefik proxy repository

为了能够交谈的主机上的码头工人守护进程,那么你还需要有安装在集装箱码头工人,客户端或使用一些码头工人的API编程语言。有一个official list of such libraries for different programming languages in the docker docs

当然你应该知道你给容器的特权。有人设法利用您的应用程序可能会关闭您的其他容器,或者更糟糕的是,在您的系统上启动自己的容器,这些容器可以轻松用于控制系统。在构建应用程序时请记住这一点。

+0

谢谢你的好解释。我试过这种方式: 码头运行-v /var/run/docker.sock:/var/run/docker.sock -p 9003:9003 [imageId] 但没有为我工作。我想我必须在我的dockerfile中导入另一个docker镜像才能使它工作,例如Ubuntu和Docker? – scripty

+0

为了能够与Docker套接字进行通信,您需要为您的编程语言(我不知道)提供适当的库,或者在图像中安装docker cli本身。这取决于您如何构建集成。请参阅回购根中的traefik Dockerfile作为示例。 –

相关问题