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

Can't execute command with bash shell

Open dsaffie opened this issue 2 years ago • 3 comments

I am trying to automate running commands with docker exec. I have an example of a command that works from the command line, but can't get working in Docker.DotNet. With my container already running I opened a command line and ran: docker exec -it containerId bash -c "apt-get update". This command is successful and I can see the output from the command in the terminal window.

Then, I tried doing the same as:

ContainerExecCreateParameters execParams = new()
{
    AttachStderr = true,
    AttachStdout = true,
    Cmd = new[] { "//bin//bash", "apt-get update" }
};
    
var exec = await this.dockerClient.Exec.ExecCreateContainerAsync(containerId, execParams);
var stream = await this.dockerClient.Exec.StartAndAttachContainerExecAsync(exec.ID, false);
var output = await stream.ReadOutputToEndAsync(new CancellationToken());

Instead of getting the exepected output of apt-get update, I get the error message: (OCI runtime exec failed: exec failed: unable to start container process: exec: "apt-get update": executable file not found in $PATH: unknown , ).

I believe this error may be due to trying to execute the command not in the bash shell, but haven't found any examples or docs that demonstrate how to properly execute a command in the bash shell using Docker.DotNet.

dsaffie avatar May 17 '23 17:05 dsaffie

Your are using two different commands (syntax) try:

Cmd = new[] { "/bin/bash", "-c", "apt-get update" }

HofmeisterAn avatar May 17 '23 18:05 HofmeisterAn

I have the same issue. I need to run the multiple commands from the bash, but Cmd = new[] { "/bin/bash", "-c", "apt-get update" }

doesn't seems to be working.

harry-123 avatar May 06 '24 17:05 harry-123

I have the same issue. I need to run the multiple commands from the bash, but Cmd = new[] { "/bin/bash", "-c", "apt-get update" }

doesn't seems to be working.

What is the response you get? What are the commands you're trying to run?

Cmd = new[] { "/bin/bash", "-c", "apt-get update" }

Works for me. The only point it fails is from a certain complexity or number of piped commands.

aitchdot avatar May 06 '24 18:05 aitchdot