有人可以分享一些展示如何挂载目录的 py api 示例吗? 我这样试过,但我看不到它的工作
dockerClient = docker.from_env()
dockerClient.containers.run('image', 'ls -ltr', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}})
最佳答案
通过获取容器对象
根据以下内容更改您的代码:
import os
import docker
client = docker.from_env()
container = client.containers.run('ubuntu:latest', 'ls -ltr /tmp', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}}, detach=True)
print(container.logs())
# => b'total 4\n-rw-r--r-- 1 1000 1000 215 Feb 14 12:07 main.py\n'
这里,容器对象是关键。要获得它,您必须将 detach
参数作为 True
传递。
然后它可以打印出执行命令的结果。
通过设置流
获取输出的另一种方法是将 stream
参数设置为 True
,返回日志生成器而不是字符串。如果分离为真,则忽略。
lines = client.containers.run('ubuntu:latest', 'ls -la /', volumes={os.getcwd(): {'bind': '/tmp/', 'mode': 'rw'}}, stream=True)
for line in lines:
print(line)
docker-py 是 docker 引擎 api 的包装器。因此,一切都在容器内执行,执行结果可通过 REST 获得。
通过使用子进程
如果您想执行某些操作并即时获取其输出,您可以使用 subprocess
模块。
import subprocess
subprocess.run(["docker run ..."])
文档:
- docker-py:
client.containers.run(...)
- 引擎 API:containers
- 子进程:subprocess.run
关于python docker如何将目录从主机挂载到容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54688176/