需要在python脚本中运行docker run命令

Pra*_*eth 3 python docker

我的Docker命令是:

docker run --rm wappalyzer/cli https://wappalyzer.com
Run Code Online (Sandbox Code Playgroud)

当我运行我的python脚本时:

#!/usr/bin/python
from subprocess import call
import json
import os
import docker

docker run --rm wappalyzer/cli "MYURL"
Run Code Online (Sandbox Code Playgroud)

它说

File "t.py", line 7
    docker run --rm wappalyzer/cli "MYURL"
             ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我的操作系统是ubuntu 14.04,我正在使用ubuntu终端。

小智 8

更新 : 2021-03-22

我们现在有了python-on-whales Python 的 Docker 客户端。适用于 Linux、macOS 和 Windows,适用于 Python 3.7 及更高版本。

>>> from python_on_whales import docker
>>> output = docker.run("hello-world")
>>> print(output)
Hello from Docker! This message shows that your installation appears to be 
working correctly.
>>> from python_on_whales import DockerClient
>>> docker = DockerClient(compose_files=["./my-compose-file.yml"])
>>> docker.compose.build()
>>> docker.compose.up()
...
>>> docker.compose.down()
Run Code Online (Sandbox Code Playgroud)

  • 该帖子显示“更新:2022-03-22”,所以它来自未来? (2认同)

And*_*inn 7

这不是有效的Python代码。如果您只是想运行一个容器并传递命令作为参数,则可以执行以下操作:

#!/usr/bin/env python
import sys
import docker

image = "wappalyzer/cli"

client = docker.from_env()
client.containers.run(image,  sys.argv[1], True)
Run Code Online (Sandbox Code Playgroud)

但是,如果您要这样做的话,您应该阅读有关Python和从Python运行进程的更多信息。Python不是Shell语言,您不能仅内联使用Shell命令。


Rob*_*ert 7

正如@AndyShinn所说,Python不是一种外壳语言,但是您可以像运行shell命令一样调用docker:

#!/usr/bin/python
import subprocess

with open("/tmp/output.log", "a") as output:
    subprocess.call("docker run --rm wappalyzer/cli https://wappalyzer.com", shell=True, stdout=output, stderr=output)
Run Code Online (Sandbox Code Playgroud)

使用这种方法,您无需导入docker。

  • 欢迎您:[链接](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) (2认同)

MRe*_*ati 6

您可以使用名为的 pip 包docker并使用它来连接到 Docker。在 subProcess 中运行命令与此解决方案之间的区别在于格式。您可以管理映像、容器以及 CLI 能够执行的所有操作。

在这里查看: https: //docker-py.readthedocs.io/en/stable/

样本:

import docker
client = docker.from_env()

client.containers.run("ubuntu", "echo hello world")

# or

client.containers.run("bfirsh/reticulate-splines", detach=True)

# you can even stream your output like this:
for line in container.logs(stream=True):
   print(line.strip())

Run Code Online (Sandbox Code Playgroud)

所有代码示例都可以在我提到的源 URL 中找到。