Dockerpy执行命令到猫日志文件

这看起来很简单,但我想用Docker-py复制下面的Docker命令:

docker exec dockerName cat /var/log/foo.log 

使用dockerpy,似乎下面应该工作:

 from docker.client import Client from docker.utils import kwargs_from_env cli = Client(**kwargs_from_env()) print kwargs_from_env() name_one = 'exec_container' cli.create_container(**{'name': name_one, 'image': 'golang'}) cli.start(name_one) cli.logs(name_one, stdout=True, stderr=True) # commenting this line out allows the below to execute perfectly e = cli.exec_create(container=name_one, cmd='ls /usr/local/bin') print cli.exec_start(exec_id=e['Id']) 

但是,当我运行此我收到以下错误跟踪:

  File "/Library/Python/2.7/site-packages/docker/utils/decorators.py", line 35, in wrapper return f(self, *args, **kwargs) File "/Library/Python/2.7/site-packages/docker/api/exec_api.py", line 75, in exec_start return self._get_result_tty(stream, res, tty) File "/Library/Python/2.7/site-packages/docker/client.py", line 311, in _get_result_tty self._raise_for_status(res) File "/Library/Python/2.7/site-packages/docker/client.py", line 146, in _raise_for_status raise errors.APIError(e, response, explanation=explanation) docker.errors.APIError: 500 Server Error: Internal Server Error ("http: Hijack is incompatible with use of CloseNotifier") 

我不知道我在做什么不正确,或者需要为docker-py做不同的处理。 紧接着上面我可以执行命令行命令罚款。

版本的一切:

 docker --version Docker version 1.10.0, build 590d5108 docker-machine --version docker-machine version 0.6.0, build e27fb87 pip freeze | grep docker-py docker-py==1.7.2 

Docker-py 在这种情况下有一个错误或意外的行为 。

临时解决scheme是实例化一个新的客户端,然后允许您执行以下操作:

 from docker.client import Client from docker.utils import kwargs_from_env cli = Client(**kwargs_from_env()) print kwargs_from_env() name_one = 'exec_container' cli.create_container(**{'name': name_one, 'image': 'golang'}) cli.start(name_one) cli.logs(name_one, stdout=True, stderr=True) cli2 = Client(**kwargs_from_env()) e = cli2.exec_create(container=name_one, cmd='ls /usr/local/bin') print cli2.exec_start(exec_id=e['Id']) 

这将是需要的,直到docker的构build反对包括这个错误修复的版本 。