运行 Docker 来自 Python3 的容器,带有 docker-py 和命令行参数
Running Docker container from Python3 with docker-py with command line arguments
我正在尝试使用 docker-py 库从 python3 脚本中 start/run 一个 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 容器在内部而不是在主机文件系统上查找文件。
如何建立连接?
非常感谢您提出的任何建议。
布莱恩
可以通过 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'}})
我正在尝试使用 docker-py 库从 python3 脚本中 start/run 一个 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 容器在内部而不是在主机文件系统上查找文件。
如何建立连接?
非常感谢您提出的任何建议。 布莱恩
可以通过 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'}})