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



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

是否有一种方法可以使用Python(或其他未在CoreOS中打包的编程语言)来管理主机环境,而无需将其安装在主机上?

PS,脚本会这样做:

docker run/rm/stop <another container>;

您可以将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以允许远程访问(目前我找不到一个好的参考)。

你还应该考虑使用Docker API,而不是通过命令行调用。有一个python库可以帮助你。

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

简而言之,它包括创建客户端和服务器证书(为了安全),并使用命令(如

)运行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程序停止和启动其他容器。

另一种方法是使用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

最新更新