Передать файл в контейнер с помощью docker exec_run python docker client - PullRequest
1 голос
/ 29 апреля 2019

Я использую Docker SDK для Python . Как передать файл в контейнер с помощью функции exec_run.

Я хочу повторить следующую команду docker exec:

docker exec -i -u postgres <Insert the id find above> pg_restore -C -d postgres < filename

Команда выше загружает резервную копию postgres. filename - это имя файла, которое находится на хост-компьютере, с которого выполняется команда exec.

Я пытаюсь это:

containers[0].exec_run("/bin/bash -c 'pg_restore -C -d postgres <'" + filename, stdout=True, stderr=True, user='postgres')
print(exec_log[1])

Здесь файл находится в другом контейнере Docker, в котором запущено приложение Python, использующее Docker-клиент Python.

Я получаю это: b'/bin/bash: 2019-04-29-postgres_db.dump: No such file or directory\n'

Я изучил put_archive, но для этого потребовалось бы извлечь файл из контейнера. Есть ли способ сделать это, используя exec_run или любым другим более простым способом?

Спасибо

1 Ответ

0 голосов
/ 24 мая 2019

В качестве обходного пути вы можете смонтировать том в образе докера, который содержит этот файл. Тогда вы можете использовать его оттуда.

container = context.client.containers.run(
    image="ipostgres",
    auto_remove=True,
    detach=True,
    volumes={"/host/machine/store: {'bind': '/opt/whatever', 'mode': 'ro'}, },
)

Тогда

exec_run("/bin/bash -c 'pg_restore -C -d postgres < /opt/whatever/filename'", stdout=True, stderr=True, user='postgres')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...