Docker.DotNet
Docker.DotNet copied to clipboard
How to attach to working container with Docker.DotNet
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
<Obsolete("Use 'Task GetContainerStatsAsync(string id, ContainerStatsParameters parameters, CancellationToken cancellationToken, IProgress<JSONMessage> 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
<Obsolete("The stream returned by this method won't be demultiplexed properly if the container was created without a TTY. Use GetContainerLogsAsync(string, bool, ContainerLogsParameters, CancellationToken) instead")>
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.

It's not looks as result of standard docker operation as
# sudo docker exec -it 7dde487b4424 pwd