我需要从另一个容器内启动、停止和重新启动容器。
例如:
Container A -> start Container B
Container A -> stop Container C
我的 Dockerfile:
FROM node:7.2.0-slim
WORKDIR /docker
COPY . /docker
CMD [ "npm", "start" ]
Docker Version 1.12.3
我想避免使用 ssh 连接。有什么想法吗?
最佳答案
容器本身在隔离环境中运行(例如,具有自己的文件系统或网络堆栈),因此没有直接的方式与其运行的主机进行交互。这当然是为了实现真正的隔离。
但是有一种方法可以以更多权限运行容器。要与主机上的 docker 守护进程通信,您可以将主机系统的 docker 套接字挂载到容器中。这与您可能将某些主机文件夹装载到容器中的方式相同。
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 .
当然,您应该知道您赋予容器哪些权限。设法利用您的应用程序的人可能会关闭您的其他容器,或者更糟糕的是,在您的系统上启动自己的容器,这些容器可以轻松地用于控制您的系统。当您构建应用程序时请记住这一点。
关于node.js - 从其他容器启动和停止 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961073/