Docker.DotNet icon indicating copy to clipboard operation
Docker.DotNet copied to clipboard

How to use "docker cp" in Docker.DotNet?

Open PupilStudio opened this issue 5 years ago • 4 comments

Output of dotnet --info:

.NET Core SDK(反映任何 global.json):
 Version:   3.0.100-preview3-010431
 Commit:    d72abce213

运行时环境:
 OS Name:     Windows
 OS Version:  10.0.18351
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview3-010431\

Host (useful for support):
  Version: 3.0.0-preview3-27503-5
  Commit:  3844df9537

.NET Core SDKs installed:
  2.1.200-preview-007474 [C:\Program Files\dotnet\sdk]
  2.1.200-preview-007517 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.400 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009426 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009472 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009497 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009648 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009748 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009804 [C:\Program Files\dotnet\sdk]
  3.0.100-preview3-010431 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0-preview3-19153-02 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0-preview3-27503-5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0-preview3-27504-2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

What version of Docker.DotNet?:

v3.125.2

Steps to reproduce the issue: 1. 2. 3.

What actually happened?: I can not find any API to copy files/

What did you expect to happen?:

Additional information:

PupilStudio avatar Mar 11 '19 05:03 PupilStudio

Your best bet is to look at what docker cp actually calls and implement that. This API is just the REST API and not the rest of the docker cli functionality.

jterry75 avatar Mar 11 '19 22:03 jterry75

If anyone else finds this, the way to do this is to use GetArchiveFromContainerAsync. See the following code sample;

        var getArchiveFromContainerParameters = new GetArchiveFromContainerParameters
        {
            Path = "c:\\myapp\\",
        };

        await Console.Out.WriteLineAsync($"Extracting archive.");
        var getArchiveFromContainerResponse = await client.Containers.GetArchiveFromContainerAsync(createContainerResponse.ID, getArchiveFromContainerParameters, false, CancellationToken.None);

        var path = Path.Combine(@"C:\Users\myAppPath\Output", testName + ".zip" );
        await Console.Out.WriteLineAsync($"Writing archive to {path}.");
        using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
        {
            await getArchiveFromContainerResponse.Stream.CopyToAsync(fs);
        }
        await Console.Out.WriteLineAsync($"Completed extracting archive.");

RyanONeill1970 avatar Oct 24 '23 15:10 RyanONeill1970

Please keep in mind that the archive stream is a tarball (not a zip).

HofmeisterAn avatar Oct 24 '23 16:10 HofmeisterAn

Any news on this?

Best Implementation I've seen is here, but it fails with large files.

virzak avatar Jan 19 '24 03:01 virzak