标签: dockerpy

docker-py:如何获取容器内运行的进程返回的退出代码?

我的 python 脚本用于docker-py启动一个 docker 容器,如下所示:

client = docker.from_env()
result = client.containers.run(
    image="my-prog-image:latest",
    command=["/etc/my-prog/configs.ini"],
    auto_remove=True,
    network_mode="host",
)
Run Code Online (Sandbox Code Playgroud)

正如记录的docker-py:容器,该client.containers.run(...)方法返回容器。如何检索my-prog在容器内运行返回的退出代码?

docker dockerpy

4
推荐指数
1
解决办法
2584
查看次数

python docker 如何将目录从主机挂载到容器

有人可以分享一些显示如何挂载目录的 py api 示例吗?我试过这样,但我没有看到它的工作

dockerClient = docker.from_env()
dockerClient.containers.run('image', 'ls -ltr', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}})
Run Code Online (Sandbox Code Playgroud)

python python-2.7 docker dockerpy

4
推荐指数
1
解决办法
5228
查看次数

docker-py:权限错误(13)

我跑步的时候

>>> import docker
>>> client = docker.from_env()
>>> client.containers.list()
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误

requests.exceptions.ConnectionError: ('Connection aborted.', PermissionError(13, 'Permission denied'))
Run Code Online (Sandbox Code Playgroud)

我认为这是因为 docker-py 无法访问 docker 守护进程。那么我该如何解决这个问题?

python linux docker dockerpy

4
推荐指数
1
解决办法
2928
查看次数

docker-py构建失败时如何获取日志?

如果我使用高级 docker-py sdk 构建映像,则会在失败时收到 BuildError。,例如

try:
    client.images.build(...)
except:
    print("Hey something wrong with image build!")
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用低级客户端 API 直接挂接并流式传输日志,请参阅如何检测 docker-py client.build() 失败时

有没有办法从镜像构建脚本中获取一些有用的调试输出,而无需深入到较低级别的 api?

python docker dockerpy

3
推荐指数
1
解决办法
1915
查看次数

处于分离模式的 docker 容器立即退出

我正在使用 docker SDK for python 并尝试创建一个容器。以下是我正在执行的代码:

import docker

client = docker.DockerClient(base_url='tcp://10.41.70.76:2375')
image = client.images.get('siab_user_one')

container = client.containers.run(image.tags[0], detach=True)
container.exec_run("ls") 
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码会抛出以下错误:

Traceback (most recent call last):
  File "/Users/aditya/workspace/term/lib/python3.6/site-packages/docker/api/client.py", line 261, in _raise_for_status
    response.raise_for_status()
  File "/Users/aditya/workspace/term/lib/python3.6/site-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 409 Client Error: Conflict for url: http://10.41.70.76:2375/v1.35/containers/ccdb556fb234eeb86b19d37c30e9d64e428bf42a8d2b70784225dcf3c5347859/exec

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dock.py", line 7, in <module>
    container.exec_run("ls")
  File "/Users/aditya/workspace/term/lib/python3.6/site-packages/docker/models/containers.py", line 196, in exec_run
    workdir=workdir,
  File "/Users/aditya/workspace/term/lib/python3.6/site-packages/docker/utils/decorators.py", line …
Run Code Online (Sandbox Code Playgroud)

python docker dockerpy

3
推荐指数
1
解决办法
1876
查看次数

如何使用docker_host_info过滤处于退出状态的docker容器?

是否有任何其他 ansible-docker 模块可以捕获虚拟机上的所有容器,甚至是处于退出状态的容器。

 - name: Get container info
    docker_host_info:
      containers: yes
    register: result
Run Code Online (Sandbox Code Playgroud)

docker_host_info 仅捕获处于 UP 状态的容器。有没有办法捕获或过滤处于退出状态的。请帮忙。

ansible docker dockerpy docker-machine ansible-2.x

3
推荐指数
1
解决办法
1807
查看次数

standard_init_linux.go:211:exec 用户进程在 alpine linux 和 python 中导致“没有这样的文件或目录”

我有一个包含 docker 文件、attack.py 和 requirements.txt 的目录。

使用它,我创建了以下 dockerfile:

FROM arm64v8/python:3.7-alpine

COPY qemu-arm-static /usr/bin

COPY ./ app-ids
WORKDIR /app-ids

RUN pip install --no-cache-dir -r requirements.txt

CMD["python","./attack.py"]
Run Code Online (Sandbox Code Playgroud)

但是,pip install 行抛出:standard_init_linux.go:211:exec user process 导致“没有这样的文件或目录”

我不明白为什么。使用 ls、pwd 等命令尝试调试会产生相同的错误。

谁能解释一下我到底做错了什么?

python docker dockerpy alpine-linux

2
推荐指数
1
解决办法
6866
查看次数

python docker sdk如何在container.run中运行多个命令

我将 python 3 与 docker sdk 一起使用,并使用它 containers.run来创建一个容器并运行我的代码,当我将命令参数与一个命令作为字符串一起使用时,它工作正常

看代码

client = docker.from_env()
container = client.containers.run(image=image, command="echo 1")
Run Code Online (Sandbox Code Playgroud)

当我尝试使用命令列表时(根据文档,这很好)

client = docker.from_env()
container = client.containers.run(image=image, command=["echo 1", "echo 2"])
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

OCI 运行时创建失败:container_linux.go:345: 启动容器进程导致“exec: \”echo 1\”: 在 $PATH 中找不到可执行文件

使用一个字符串时也会发生同样的情况

"echo 1; echo 2"
Run Code Online (Sandbox Code Playgroud)

我正在使用 ubuntu 19 和 docker

Docker 版本 18.09.9,内部版本 1752eb3

它过去可以很好地处理命令列表,新版本的 docker 有什么问题吗?还是我在这里遗漏了一些东西?

python backend docker dockerpy devops

2
推荐指数
2
解决办法
6179
查看次数

docker-py 在生成器挂起时读取容器日志

我正在使用docker-py将容器日志作为流读取。通过将stream标志设置为True文档中所示。基本上,我正在迭代所有容器并作为生成器读取它们的容器日志并将其写入文件,如下所示:

for service in service_names:
    dkg = self.container.logs(service, stream=True)
    with open(path, 'wb') as output_file:
        try:
            while True:
                line = next(dkg).decode("utf-8")
                print('line is: ' + str(line))
                if not line or "\n" not in line:  # none of these work
                    print('Breaking...')
                    break
                output_file.write(str(line.strip()))

        except Exception as exc:                  # nor this
            print('an exception occurred: ' + str(exc))
Run Code Online (Sandbox Code Playgroud)

但是,它只读取第一个服务并挂在文件末尾。它不会跳出循环,也不会引发异常(例如 StopIteration 异常)。根据文档,如果stream=True它应该返回一个生成器,我打印出了生成器类型,它显示为 a,docker.types.daemon.CancellableStream所以如果我们到达容器日志生成器的末尾并调用,它不会遵循传统的 python 生成器和异常。下一个()。

正如你所看到的,我尝试检查 eol 是否为假或包含换行符,甚至看看它是否会捕获任何类型的异常,但没有运气。我还有别的办法吗。确定它是否到达服务流的末尾并跳出循环while并继续编写下一个服务?我想使用流的原因是因为大量数据导致我的系统内存不足,所以我更喜欢使用生成器。

generator python-3.x docker dockerpy

2
推荐指数
1
解决办法
3319
查看次数

docker-py exec_start如何将输出流式传输到stdout

我正在尝试使用docker-py执行一些较长的过程我的问题是我看不到我在做什么的输出...

如何将docker exec的输出直接流式传输到stdout?还是更好地记录?

我已经看到有一个“ stream”参数,但是我不理解如何使用返回的生成器...

        exec_c=self.docker.exec_create(myContainer,e["cmd"])
        output=self.docker.exec_start(exec_c)
        self.logger.info(output)
Run Code Online (Sandbox Code Playgroud)

http://docker-py.readthedocs.org/en/latest/api/?highlight=exec#exec_create

python python-3.x dockerpy

1
推荐指数
1
解决办法
3759
查看次数

如何使用docker py获取docker中所有容器的名称

我需要从 docker py 获取所有正在运行的容器的名称。我尝试使用下面的命令,但它用容器 ID 进行响应。

self.client = docker.from_env()
running_container = self.client.containers.list()
Run Code Online (Sandbox Code Playgroud)

容器名称:

[<Container: ac380a213d>, <Container: 0bdc8b7569>, <Container: c9e9123544>, <Container: 6aaec45e8c>, <Container: 1b2a3d3732>, <Container: 946ada8f21>, <Container: 821978ae2c>]
Run Code Online (Sandbox Code Playgroud)

请问如何将其转换为相应的docker容器名称

python docker dockerpy

1
推荐指数
1
解决办法
4387
查看次数