如何从python脚本运行交互式docker shell

时间:2018-08-01 08:23:24

标签: python docker

我构建了有助于在docker swarm中进入容器的脚本:

import docker

d = docker.from_env()
s = d.services.get(args.service_name)
task = s.tasks(filters={"desired-state": "running"})
node = d.nodes.get(task[0]['NodeId'])
container_id = task[0]['Status']['ContainerStatus']['ContainerID']

print("env DOCKER_HOST=tcp://{addr}:2376 docker exec -ti {container} bash".format(addr=node.attrs['Status']['Addr'], container=container_id))

现在我想从脚本本身运行交互式shell,但这不起作用:

c_client = docker.DockerClient(base_url="tcp://{}:2376".format(node.attrs['Status']['Addr']))
c = c_client.containers.get(container_id)
c.exec_run("bash", stdin=True, tty=True)

那么有什么方法可以仅使用python和python-docker运行交互式shell?

1 个答案:

答案 0 :(得分:0)

这似乎是有可能的,但是可能会很乖。

Looks like,首先需要使用socket=True。完成此操作后,您需要将Python进程的stdinstdout连接到套接字,根据需要进行读写。