如何从容器执行主机的Docker命令?

我想在Python中编写Docker容器pipe理脚本。 但是,由于我使用的是CoreOS,因此不包含Python作为标准命令。 所以,我正在考虑使用Python Docker容器( https://registry.hub.docker.com/_/python/ )来执行我的脚本。 但是,在这种情况下,脚本将在容器的虚拟机中执行,该虚拟机无法访问主机的Docker CLI。

有没有办法使用Python(或其他编程语言不包含在CoreOS中)来pipe理主机环境,而无需在主机上安装它?

PS,脚本会做这样的事情:

docker run/rm/stop <another container>;

如果你让Docker守护进程可以通过HTTPS访问,那么你可以从远程机器或Docker容器中与守护进程进行通信。 在守护进程中启用HTTPS的说明在这里https://docs.docker.com/articles/https/

简而言之,它涉及到创build客户端和服务器证书(为了安全),并运行Docker守护进程

 docker -d --tlsverify --tlscacert=ca.pem \ --tlscert=server-cert.pem --tlskey=server-key.pem \ -H=0.0.0.0:2376 

在此模式下运行时,您可以使用适合您的编程语言的客户端库https://docs.docker.com/engine/reference/api/remote_api_client_libraries/

有一个用于python docker-py我没有尝试过,但可以从经验中说这种方法使用docker-java客户端库,在容器内部有一个Java程序停止并启动其他容器。

您可以将docker二进制文件和套接字挂载到容器中:

 $ docker run -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock debian docker --version Docker version 1.7.0, build 0baf609 

或者设置docker允许远程访问(我不能在这一刻find一个很好的参考)。

你也应该看看使用Docker API而不是进行命令行调用。 有一个Python库可以帮助你。

另一种方法是使用CoreOS工具箱访问python和exec docker。 例如,我的CoreOS机器从CoreOS运行一个简单的python命令来查看docker进程状态“:

 core@zz1 ~ $ toolbox python -c 'import os;os.system("/media/root/usr/bin/docker -H unix:///media/root/var/run/docker.sock ps")' CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f5480ebc129 gcr.io/google_containers/etcd:2.0.12 "/usr/local/bin/etcd 47 minutes ago Up 46 minutes k8s_etcd.3a160ccf_kube-dns-45.55.230.109_kube-system_790a48cfb2e2a5ae0abfcb6e3221275f_9d4fc659 ddbbc5e5033c gcr.io/google_containers/skydns:2015-03-11-001 "/skydns -addr=0.0.0 47 minutes ago Up 47 minutes k8s_skydns.db942972_kube-dns-45.55.230.109_kube-system_790a48cfb2e2a5ae0abfcb6e3221275f_59835376 ... 

-G