Python Docker SDK docker exec_run在运行时失败

唐·G

Python 2.7.10,Docker版本18.03.1-ce-mac65(24312)

我可能对docker exec_run命令的工作方式缺乏了解,但是我正在努力使其工作。以下代码可以正常工作

from __future__ import print_function
import docker

if __name__ == '__main__':
    client = docker.from_env()
    image = client.images.pull('oraclelinux:7')
    container = client.containers.run('oraclelinux:7',
                                      command='ls',
                                      stderr=True,
                                      stdout=True,
                                      auto_remove=False,
                                      remove=False,
                                      detach=True
                                      )
    log = container.logs(stdout=True, stderr=True, stream=True)
    for line in log:
        print(line, end='')

    container.stop()
    print(container.status)
    container.remove()

并返回根目录中的目录列表。但是,我原本希望的等效方法失败了。

from __future__ import print_function

import docker

if __name__ == '__main__':
    client = docker.from_env()
    image = client.images.pull('oraclelinux:7')
    container = client.containers.create('oraclelinux:7',
                                         command='/bin/bash',
                                         auto_remove=False)
    container.start()

    log = container.exec_run('ls',
                             stderr=True,
                             stdout=True,
                             detach=True)

    for line in log:
        print(line, end='')

    container.stop()
    print(container.status)
    container.remove()

有以下错误

/Users/user/PythonVirtualEnv/bin/python "/Users/user/DockerAutomation.py"
Traceback (most recent call last):
  File "/Users/user/DockerAutomation.py", line 16, in <module>
    detach=True)
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/models/containers.py", line 185, in exec_run
    resp['Id'], detach=detach, tty=tty, stream=stream, socket=socket
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/utils/decorators.py", line 19, in wrapped
    return f(self, resource_id, *args, **kwargs)
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/api/exec_api.py", line 162, in exec_start
    return self._result(res)
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/api/client.py", line 231, in _result
    self._raise_for_status(response)
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/api/client.py", line 227, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "/Users/user/PythonVirtualEnv/lib/python2.7/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
    raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 500 Server Error: Internal Server Error ("OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "process_linux.go:86: executing setns process caused \"exit status 21\"": unknown")

谁能对我可能做错的事情提供任何见解?

编辑:虽然Ignacio回答了这个问题,但我添加了另一个答案,该答案更接近于我想做的事情(针对一个打开的容器运行多个命令并输出输出)。

伊格纳西奥·米兰(IgnacioMillán)

我认为问题出在exec_run方法的参数detach = True

将其设置为true时,将执行命令,但Docker客户端不会附加到输出。

我在测试时发现了另一个问题,使用命令/ bin / bash运行容器会导致容器在到达exec_run之前就结束了。

这个脚本对我有用:

from __future__ import print_function

import docker

if __name__ == '__main__':
    client = docker.from_env()
    image = client.images.pull('oraclelinux:7')
    container = client.containers.create('oraclelinux:7',
                                         command='sleep 10000',
                                         auto_remove=False)
    container.start()

    log = container.exec_run('ls',
                             stderr=True,
                             stdout=True)

    for line in log:
        print(line, end='')

    container.stop()
    print(container.status)
    container.remove()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python docker SDK中使用exec_run替换我的docker cli命令

NET Core SDK与Docker的运行时版本

使用 docker python SDk 创建多个容器失败

docker OCI运行时创建失败

如何使用Docker Docker SDK for Python获取容器大小

如何使用docker SDK for python获取docker容器的IP地址?

exec docker运行时docker中的环境变量

适用于 Python 的 Docker SDK:fileobj

Python docker SDK内容信任无效

如何使用docker Go Go SDK运行docker?

在docker中运行时无法从python连接到influxdb

Docker构建错误OCI运行时创建失败“ exec:\” / bin / bash \”:stat / bin / bash

带有.NetCore的Docker,我应将SDK或运行时映像用于微服务吗?

Docker:我无法在运行时进行卷绑定

如何在运行时在docker中接受参数?

如何在运行时更换 docker 容器

ansible 返回“无法导入所需的 Python 库(Python 的 Docker SDK:docker (Python >= 2.7) 或 docker-py (Python 2.6))

运行时Docker OSX端口映射错误:exec

试图通过docker exec获取bash,但没有任何效果(Jaeger容器)-> OCI运行时exec失败

Python docker sdk如何在container.run中设置cpu计数

Go应用程序失败并在使用docker-compose运行时退出,但可与docker run命令配合使用

从 Jenkins 管道中的 docker 代理运行时,Ansible 失败

Docker 构建错误 OCI 运行时创建失败

通过docker运行时react-scripts构建失败

Docker公开端口-OCI运行时创建失败

如何修复Docker中的OCI运行时创建失败

Docker,创建实例时docker-compose失败,运行时失败

Docker Run对于Python项目失败

python docker SDK; 获取有关悬挂的Docker映像的信息