标签: dockerpy

在OSX上通过docker-py连接到Docker-Machine

上下文

我正在尝试使用docker-py连接到OSX上的docker-machine.

我不能简单地使用标准,Client(base_url='unix://var/run/docker.sock')因为docker在docker-machine虚拟机上运行,而不是我的本地操作系统.

相反,我试图使用以下方法安全地连接到VM docker.tls:

from docker import Client
import docker.tls as tls
from os import path

CERTS = path.join(path.expanduser('~'), '.docker', 'machine', 'certs')

tls_config = tls.TLSConfig(
    client_cert=(path.join(CERTS, 'cert.pem'), path.join(CERTS,'key.pem')),
    ca_cert=path.join(CERTS, 'ca.pem'),
    verify=True
#verify=False
)
client = docker.Client(base_url='https://192.168.99.100:2376', tls=tls_config)
Run Code Online (Sandbox Code Playgroud)

问题

当我尝试运行此代码(print client.containers()在下一行运行类似的东西)时,我收到此错误:

requests.exceptions.SSLError: hostname '192.168.99.100' doesn't match 'localhost'
Run Code Online (Sandbox Code Playgroud)

我一直试图在类似问题上遵循github问题boot2docker,即.旧版本docker-machine,但我不太了解如何实现SSL证书.我尝试按照github问题的建议添加192.168.99.100 localhost到我的/etc/hosts文件末尾,但这并没有解决问题(即使之后export DOCKER_HOST=tcp://localhost:2376).

也许通过证书进行连接不是可行的方法docker-machine,因此任何连接到特定docker-machine通道的替代方法的答案docker-py …

macos ssl docker dockerpy docker-machine

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

使用docker-py与'docker exec -it bash <container_id>'进行双向通信

我似乎无法弄清楚如何使用docker-py SDK启用容器shell会话的async i/o.我本来想要实现的是docker exec -it bash $container_id在docker-py中有一个相同的工作.

显然,stdout没有任何问题.只是没有(明显的)方法来实际写入stdin来与正在运行的容器的shell进行交互.真的是这样吗?

cmd = "bash"
cli = docker.DockerClient()
cli.containers.get(container_id)
socket = cli.exec_run(cmd, stdin=True, socket=True)
socket.writable() # => False
Run Code Online (Sandbox Code Playgroud)

我还尝试'bin/bash -c "export TERM=xterm; exec bash"作为cmd 运行tty并向exec_run 添加标志.毋庸置疑,无济于事.

难道我做错了什么?

python bash docker dockerpy

6
推荐指数
0
解决办法
243
查看次数

使用 docker-py 从现有容器运行 docker 容器

我有一个运行 Flask 应用程序的 Docker 容器。当 Flask 接收到 http 请求时,我想触发一个新的临时 Docker 容器的执行,该容器一旦完成它必须做的事情就会关闭。

我读过应该避免使用 Docker-in-Docker,因此这个新容器应该作为同级容器在我的主机上运行,​​而不是在 Flask 容器内运行。

使用docker-py执行此操作的解决方案是什么?

python flask docker dockerpy docker-in-docker

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

Jenkins Docker 插件显示离线

我已将Docker 插件与 Jenkins集成。

我确信集成成功了,因为在安装后我检查了“测试连接”并且它正确显示了我的 Docker 版本。

现在我试图从我的构建中配置奴隶,但它失败了。我正进入(状态:

pending  #5     
(pending—All nodes of label ‘docker test’ are offline
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何调试这个吗?

continuous-integration jenkins docker boot2docker dockerpy

5
推荐指数
0
解决办法
1327
查看次数

使用 docker-py 在同一个容器上运行多个命令

我想使用 docker-py 创建一个过程来在 Docker 容器内运行多个命令。阅读文档,我发现我可以在创建容器时使用命令选项..如下所示:

c.create_container(image="myimage", command="mycommand")
Run Code Online (Sandbox Code Playgroud)

有没有办法在刚刚创建的容器上运行其他命令?

谢谢!

docker dockerpy

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

侦听docker swarm事件的API

我试图挂接到docker事件总线上,以监听集群上发生的各种事件,例如节点离开和加入集群,创建的服务等。问题。

  1. 是否有可能在群体级别获得此类信息?

  2. 如果是这样,是否使用dockerpy库来侦听此类事件?

dockerpy docker-swarm

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

如何从 dockerpy 中的 docker-run 管道输出标准输出

当我像这样正常运行我的 docker 镜像时

docker run -v ..... {DOCKER_IMAGE}
Run Code Online (Sandbox Code Playgroud)

我按预期登录了终端。但是像这样运行:

docker_client = docker.from_env()
container  = docker_client.containers.run(DOCKER_IMAGE, None, environment=[f'foo={self.profile}'], 
volumes={...,}, auto_remove=True, stderr=True, stdout=True)
# No logs show up
Run Code Online (Sandbox Code Playgroud)

似乎抑制日志。如何在运行时获取日志输出?我可以流式传输 docker 容器运行吗?

我可以做这个

docker_client.containers.run(.... detach=True)
for line in container.logs(stream=True): 
    print(line)
Run Code Online (Sandbox Code Playgroud)

但这会丢失是否是调试/信息/警告/错误

python docker dockerpy

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

实时跟踪 docker-py 的 exec_run() 输出

Python noob 这里,我尝试使用exec_runfrom 的函数docker-py将命令发送到分离的 docker 容器,并让输出实时到达 stdout。这是一个 MWE:

import docker, sys
client = docker.from_env()
# start a detached container
box = client.containers.run(image = "ubuntu",
                            remove = True,
                            detach = True,
                            tty = True,
                            command = "/bin/bash")
# send a test command
box.exec_run(cmd = "find /") # gives no output in the terminal when run

# same again, but save the output
run = box.exec_run(cmd = "find /")
print(run.output.decode("utf-8"))

box.stop()
sys.exit()
Run Code Online (Sandbox Code Playgroud)

我可以通过将输出存储在变量中来获取事实后的输出,但我似乎无法获得实时输出。我实际上想给它长时间运行的进程,因此最好在发生时查看输出(以及保存它)。这很难做到吗,还是我在这里错过了一些非常基本的东西?

python stdout output docker dockerpy

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

Docker-py:有没有办法将回调函数传递给以“分离”模式运行的容器?

我正在 Python 中使用docker-py运行一个容器。与文档类似:

import docker
client = docker.from_env()
container = client.containers.run('bfirsh/reticulate-splines', detach=True)
Run Code Online (Sandbox Code Playgroud)

容器执行一些任务并将.json文件保存到共享卷。一切工作正常,除了我不知道如何在后台运行时捕获容器退出。更具体地说,我的问题如下:

“docker-py 有没有办法将回调函数传递给以分离模式运行的容器?”

我想访问.json 退出时保存的内容,并避免使用丑陋的语句,例如time.sleep()或 在status is running. 从文档来看,这似乎不可能。您有什么解决方法可以分享吗?

python dockerpy

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

docker-py:容器 STDIN 和 STDOUT

我正在尝试使用 docker-py 创建运行容器化应用程序,并且需要将输入数据写入其 STDIN,并从其 STDOUT 读取。基本上是这样的工作流程

echo "hello" | docker run -i --rm busybox sh -c "cat -"
Run Code Online (Sandbox Code Playgroud)

但在Python中。简而言之,我已经尝试了此处描述的STDIN 部分的方法,并 为 STDOUT 部分附加了另一个套接字。但它并没有像我希望的那样工作......这是一个最小的例子:

docker_test.py

echo "hello" | docker run -i --rm busybox sh -c "cat -"
Run Code Online (Sandbox Code Playgroud)

一个假人test.txt

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

以及执行结果:

$ ./docker_test.py                                                                                                             
1 


Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它只输出测试文件的第一行,后面跟着一堆换行符,然后挂起。有时,它根本不输出任何内容,但无论哪种情况,它都不会退出。

我该如何正确地做到这一点?任何帮助将不胜感激。

提前致谢!

python docker dockerpy

5
推荐指数
0
解决办法
821
查看次数