我构建了有助于在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?
答案 0 :(得分:0)
这似乎是有可能的,但是可能会很乖。
Looks like,首先需要使用socket=True
。完成此操作后,您需要将Python进程的stdin
和stdout
连接到套接字,根据需要进行读写。