dotnet / dotnet/Docker.DotNet

How to attach to working container with Docker.DotNet

Open
#552 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
2.4k
Forks
416
PR merge metrics
No merged PRs in 30d

Description

One of important future to working with running container is attaching to running container with one command. Or with /bin/bash if we can attach interactively. So, this is command:

# sudo docker exec -it 7dde487b4424 bash
# sudo docker exec -it 7dde487b4424 pwd

Unfortunately, I can not found this command Docker.DotNet, some functions has similar name, but has no parameters like "bash command"

Public Interface IContainerOperations
Function ListContainersAsync(parameters As ContainersListParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of IList(Of ContainerListResponse))
Function ExtractArchiveToContainerAsync(id As String, parameters As ContainerPathStatParameters, stream As Stream, Optional cancellationToken As CancellationToken = Nothing) As Task
Function GetArchiveFromContainerAsync(id As String, parameters As GetArchiveFromContainerParameters, statOnly As Boolean, Optional cancellationToken As CancellationToken = Nothing) As Task(Of GetArchiveFromContainerResponse)
Function RemoveContainerAsync(id As String, parameters As ContainerRemoveParameters, Optional cancellationToken As CancellationToken = Nothing) As Task
Function WaitContainerAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerWaitResponse)
Function AttachContainerAsync(id As String, tty As Boolean, parameters As ContainerAttachParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of MultiplexedStream)
Function UnpauseContainerAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task
Function PauseContainerAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task
Function RenameContainerAsync(id As String, parameters As ContainerRenameParameters, cancellationToken As CancellationToken) As Task
Function KillContainerAsync(id As String, parameters As ContainerKillParameters, Optional cancellationToken As CancellationToken = Nothing) As Task
Function RestartContainerAsync(id As String, parameters As ContainerRestartParameters, Optional cancellationToken As CancellationToken = Nothing) As Task
Function StopContainerAsync(id As String, parameters As ContainerStopParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of Boolean)
Function StartContainerAsync(id As String, parameters As ContainerStartParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of Boolean)
Function ResizeContainerTtyAsync(id As String, parameters As ContainerResizeParameters, Optional cancellationToken As CancellationToken = Nothing) As Task
Function GetContainerStatsAsync(id As String, parameters As ContainerStatsParameters, progress As IProgress(Of ContainerStatsResponse), Optional cancellationToken As CancellationToken = Nothing) As Task
progress)'")>
Function GetContainerStatsAsync(id As String, parameters As ContainerStatsParameters, cancellationToken As CancellationToken) As Task(Of Stream)
Function ExportContainerAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task(Of Stream)
Function InspectChangesAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task(Of IList(Of ContainerFileSystemChangeResponse))
Function GetContainerLogsAsync(id As String, tty As Boolean, parameters As ContainerLogsParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of MultiplexedStream)
Function GetContainerLogsAsync(id As String, parameters As ContainerLogsParameters, cancellationToken As CancellationToken, progress As IProgress(Of String)) As Task

Function GetContainerLogsAsync(id As String, parameters As ContainerLogsParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of Stream)
Function ListProcessesAsync(id As String, parameters As ContainerListProcessesParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerProcessesResponse)
Function InspectContainerAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerInspectResponse)
Function CreateContainerAsync(parameters As CreateContainerParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of CreateContainerResponse)
Function PruneContainersAsync(Optional parameters As ContainersPruneParameters = Nothing, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainersPruneResponse)
Function UpdateContainerAsync(id As String, parameters As ContainerUpdateParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerUpdateResponse)
End Interface

If we can see to exec interface

Public Interface IExecOperations
Function ExecCreateContainerAsync(id As String, parameters As ContainerExecCreateParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerExecCreateResponse)
Function StartContainerExecAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task
Function StartAndAttachContainerExecAsync(id As String, tty As Boolean, Optional cancellationToken As CancellationToken = Nothing) As Task(Of MultiplexedStream)
Function StartWithConfigContainerExecAsync(id As String, eConfig As ContainerExecStartParameters, Optional cancellationToken As CancellationToken = Nothing) As Task(Of MultiplexedStream)
Function ResizeContainerExecTtyAsync(id As String, parameters As ContainerResizeParameters, Optional cancellationToken As CancellationToken = Nothing) As Task
Function InspectContainerExecAsync(id As String, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ContainerExecInspectResponse)
End Interface

We can see only two methods with CMD parameters - ExecCreateContainerAsync and StartWithConfigContainerExecAsync.
I try to use it

AttachToContainer(DockerHub, ContainerId, CMD, LogCtsSrc.Token)
ReadContainerLog(DockerHub, ContainerId, Sub(X) Console.WriteLine(X), LogCtsSrc.Token)

Function AttachToContainer(DockerHub As DockerClient, ContainerID As String, Cmd As IList(Of String), ExecCts As CancellationToken) As Task(Of ContainerExecCreateResponse)
Dim ExecTask As Task(Of ContainerExecCreateResponse) = DockerHub.Exec.ExecCreateContainerAsync(ContainerID, New ContainerExecCreateParameters With {
.AttachStdin = False,
.AttachStderr = True,
.AttachStdout = True,
.Tty = False,
.Cmd = Cmd
},
ExecCts)
Return ExecTask
End Function

And receive nothing, only old part of container log instead response of my commands in CMD.

![docker_01292022_115237-1](https://user-images.githubusercontent.com/86534217/151672835-75065c11-55d0-4ae1-b295-b0ab054988eb.png)

It's not looks as result of standard docker operation as

# sudo docker exec -it 7dde487b4424 pwd

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.