Я знаю, что есть возможный способ двунаправленного копирования файла между хостом и контейнером докеров с помощью docker cp
, а также можно получить файл из запущенного контейнера с помощью docker-py. Но я не могу понять, как (или возможно ли вообще) скопировать файл с хоста в работающий контейнер с помощью docker-py. Ребята, есть ли у вас опыт решения такой проблемы? Возможно ли это сделать или мне нужно выполнить команду, используя python os.system
. Я хотел бы избежать этого решения.
Как скопировать файл с хоста в контейнер с помощью docker-py (docker SDK)
Ответы (2)
Что-то вроде этого должно работать:
import os
import tarfile
import docker
client = docker.from_env()
def copy_to(src, dst):
name, dst = dst.split(':')
container = client.containers.get(name)
os.chdir(os.path.dirname(src))
srcname = os.path.basename(src)
tar = tarfile.open(src + '.tar', mode='w')
try:
tar.add(srcname)
finally:
tar.close()
data = open(src + '.tar', 'rb').read()
container.put_archive(os.path.dirname(dst), data)
А затем используйте его как:
copy_to('/local/foo.txt', 'my-container:/tmp/foo.txt')
person
Yani
schedule
09.10.2018
Как извлечь архив в контейнер после put_archive?
- person Malar Kandasamy; 28.03.2021
Какое имя файла после put_archive в контейнере?
- person Malar Kandasamy; 28.03.2021
Фрагмент кода с использованием памяти BytesIO:
def copy_to_container(container: 'Container', src: str, dst_dir: str):
""" src shall be an absolute path """
stream = io.BytesIO()
with tarfile.open(fileobj=stream, mode='w|') as tar, open(src, 'rb') as f:
info = tar.gettarinfo(fileobj=f)
info.name = os.path.basename(src)
tar.addfile(info, f)
container.put_archive(dst_dir, stream.getvalue())
person
Yuan HOng
schedule
29.05.2021
put_archive
. docker-py.readthedocs.io/ ru/стабильный/ - person Oluwafemi Sule   schedule 24.09.2017