【问题标题】:Running Docker container from Python3 with docker-py with command line arguments使用带有命令行参数的 docker-py 从 Python3 运行 Docker 容器
【发布时间】:2018-08-04 00:15:41
【问题描述】:

我正在尝试使用 docker-py 库从 python3 脚本启动/运行 docker 容器。这是代码。

c = docker.DockerClient()
ctr = c.containers.run('alexwoif/docker-grib2json',
command='grib2json --names --data --fp 2 --fs 103 --fv 10.0 --output /usr/local/{}.json /usr/local/{}'.format(grib_file, grib_file), detach=True)

python 脚本在主机上,而不是在容器中,所以当我运行脚本时它找不到目标 grib_file。 错误信息是:

b'Cannot find input file: /usr/local/gfs_wind_f000.grib\n'

python 脚本位于 /var/www/mywebsite/api/data/grib,这也是 *.grib 文件所在的位置。

命令字符串类似于grib2json github 项目中给出的示例,除了我使用--output 将json 写入文件。

grib2json --names --data --fp 2 --fs 103 --fv 10.0 gfs.t18z.pgrbf00.2p5deg.grib2

为了澄清,应该读取并处理为 json 的 *.grib 文件与 python 脚本位于同一目录中。

我认为断开连接是 docker 容器在内部而不是在主机文件系统上查找文件。

如何建立这种联系?

非常感谢您提出的任何建议。 布莱恩

【问题讨论】:

  • 这听起来像你在寻找类似subprocess.call() 的东西,而不是任何与 Docker 相关的东西。如果脚本不在映像中,而输入和输出在主机文件系统中……Docker 是如何进入其中的?
  • 我认为必须有一种方法可以通过某种类型的映射或卷共享将 docker 容器中处理的文件推送到主机文件系统。

标签: python-3.x docker dockerpy


【解决方案1】:

可以通过 volumes 参数安装 docker 主机的 /usr/local

c = docker.DockerClient()
ctr = c.containers.run(
    'alexwoif/docker-grib2json',
    command='grib2json --names --data --fp 2 --fs 103 --fv 10.0 --output /usr/local/{}.json /usr/local/{}'.format(grib_file, grib_file),
    detach=True,
    volumes={'/usr/local': {'bind': '/usr/local', 'mode': 'ro'}})

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多