如何使用docker-py(docker SDK)将文件从主机复制到容器

时间:2017-09-24 13:01:50

标签: python docker docker-container dockerpy

我知道,如何使用docker cp在主机和docker容器之间双向复制文件,并且可以使用docker-py从运行容器中获取文件。但我无法弄清楚如何(或者甚至可能)使用docker-py将文件从主机复制到正在运行的容器中。 你们有这种问题的经验吗?是否可以使用python os.system执行或必须执行命令。我想避免这种解决方案。

2 个答案:

答案 0 :(得分:3)

类似的事情应该起作用:

<ItemGroup>
  <EmbeddedResource Include="Properties\Resource.hu-HU.resx">
      <DependentUpon>Resource.resx</DependentUpon>
  </EmbeddedResource>
  <EmbeddedResource Include="Properties\Resource.fr-FR.resx">
      <DependentUpon>Resource.resx</DependentUpon>
  </EmbeddedResource>
  <EmbeddedResource Include="Properties\Resource.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resource.Designer.cs</LastGenOutput>
</ItemGroup>

然后像这样使用它:

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)

答案 1 :(得分:0)

使用内存 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())