Я пытаюсь запустить / запустить контейнер докеров из скрипта python3 с библиотекой docker-py. Вот код.
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.
Командная строка аналогична примеру, приведенному в проекте github grib2json, за исключением того, что я использую --output для записи json в файл.
grib2json --names --data --fp 2 --fs 103 --fv 10.0 gfs.t18z.pgrbf00.2p5deg.grib2
Для пояснения, файлы * .grib, которые следует читать и обрабатывать в json, находятся в том же каталоге, что и скрипт python.
Я думаю, что отключение - это то, что контейнер докеров ищет файлы внутри, а не в файловой системе хоста.
Как мне установить эту связь?
Большое спасибо за любые предложения, которые могут у вас возникнуть. Брайан
Я думаю, что должен быть способ отправить файл, обработанный в контейнере докера, в файловую систему хоста с помощью какого-либо типа сопоставления или совместного использования тома.





Монтировать /usr/local хоста докеров можно с помощью аргумента 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'}})
Похоже, вы ищете что-то вроде
subprocess.call(), а не что-то связанное с Docker. Если скрипта нет в образе, а входы и выходы находятся в файловой системе хоста ... как Docker попадает в него?