使用带有命令行参数的docker-py从Python3运行Docker容器

时间:2018-08-04 00:15:42

标签: python-3.x docker dockerpy

我正在尝试使用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容器正在内部查找文件而不是在主机文件系统上查找

我如何建立连接?

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

1 个答案:

答案 0 :(得分:0)

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

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'}})