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

时间:2017-07-01 14:35:00

标签: python docker

我的Docker命令是:

docker run --rm wappalyzer/cli https://wappalyzer.com

当我运行我的python脚本时:

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

docker run --rm wappalyzer/cli "MYURL"

它说

File "t.py", line 7
    docker run --rm wappalyzer/cli "MYURL"
             ^
SyntaxError: invalid syntax

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

4 个答案:

答案 0 :(得分: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)

但是你应该阅读更多关于Python和从Python运行进程的内容,如果这就是你所追求的。 Python不是一种shell语言,你不能只使用内联的shell命令。

答案 1 :(得分:3)

正如@AndyShinn所说,Python不是一种shell语言,但你可以像运行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)

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

答案 2 :(得分:1)

您可以使用名为 docker 的 pip 包并使用它连接到 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())

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

答案 3 :(得分:-1)

更新:2022-03-22

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

URS00000000M3 65
URS0000000001 95