我需要从另一个容器内启动,停止和重启容器。
例如:
容器A - >启动Container B
容器A - >停止容器C
我的Dockerfile:
FROM node:7.2.0-slim
WORKDIR /docker
COPY . /docker
CMD [ "npm", "start" ]
Docker Version 1.12.3
我想避免使用ssh连接。有任何想法吗?
答案 0 :(得分:2)
本身,容器在隔离的环境中运行(例如,使用自己的文件系统或网络堆栈),因此没有直接的方式与运行它的主机进行交互。这当然是为了实现真正的隔离。
但是有一种方法可以运行具有更多权限的容器。要与主机上的docker守护程序通信,您可以将主机系统的docker socket插入容器中。这与您可能将某个主机文件夹安装到容器中的方式相同。
docker run -v /var/run/docker.sock:/var/run/docker.sock yourimage
例如,请参阅traefik代理的docker-compose文件,该文件是一个监听主机上启动和停止容器以激活某些代理路由的进程。您可以找到示例in the traefik proxy repository。
为了能够与主机上的docker守护进程通信,您还需要在容器中安装docker客户端,或者使用一些docker api作为编程语言。有official list of such libraries for different programming languages in the docker docs。
当然,您应该了解您为容器提供的权限。设法利用您的应用程序的人可能会关闭您的其他容器,或者更糟糕的是,在您的系统上启动自己的容器,这些容器可以轻松用于控制您的系统。在构建应用程序时请记住这一点。