Executing commands¶
Container startup command¶
By default the container will execute whatever command is specified in the image's Dockerfile. If you would like to send a CMD (command) to a container, you can pass it in to
the container request via the Cmd
field. For example:
req := ContainerRequest{
Image: "alpine",
WaitingFor: wait.ForAll(
wait.ForLog("command override!"),
),
Cmd: []string{"echo", "command override!"},
}
Executing a command¶
You can execute a command inside a running container, similar to a docker exec
call:
c, _, err = container.Exec(ctx, []string{"touch", path})
if err != nil {
t.Fatal(err)
}
if c != 0 {
t.Fatalf("File %s should have been created successfully, expected return code 0, got %v", path, c)
}
This can be useful for software that has a command line administration tool. You can also get the logs of the command execution (from an object that implements the io.Reader interface). For example:
c, reader, err := container.Exec(ctx, []string{"ls", path})
if err != nil {
t.Fatal(err)
}
if c != 1 {
t.Fatalf("File %s should not have existed, expected return code 1, got %v", path, c)
}
buf := new(strings.Builder)
_, err = io.Copy(buf, reader)
if err != nil {
t.Fatal(err)
}
// See the logs from the command execution.
t.Log(buf.String())
This is done this way, because it brings more flexibility to the user, rather than returning a string.