Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to copy a file from host to container using docker-py (docker SDK)

I know, there is possible way how to copy file bidirectionally between host and docker container using docker cp and also it is possible to obtain file from running container using docker-py. But I am not able to figure out how (or if it is even possible) copy file from host to running container using docker-py. Do you guys have any experiences with such kind of problem? Is it possible to do or I have to execute command using python os.system. I would like to avoid this solution.

like image 592
s.t.e.a.l.t.h Avatar asked Sep 24 '17 13:09

s.t.e.a.l.t.h


People also ask

How do I import a file into a docker container?

First, set the path in your localhost to where the file is stored. Next set the path in your docker container to where you want to store the file inside your docker container. Then copy the file which you want to store in your docker container with the help of CP command.


1 Answers

Something like this should work:

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)

And then use it like:

copy_to('/local/foo.txt', 'my-container:/tmp/foo.txt')
like image 147
Yani Avatar answered Oct 12 '22 13:10

Yani