cli/command/container: don't mutate ConfigFile.DetachKeys

This code was introduced in 15aa2a663b,
but from those changes, it appears that overwriting the config value was
merely out of convenience, and that struct being used as an intermediate.

While changing the config here should be mostly ephemeral, and not written
back to the config-file, let's be clear on intent, and not mutatte the config
as part of this code.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-06-08 16:53:30 +02:00
parent 23e26f40fe
commit 2331e4d521
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
3 changed files with 19 additions and 18 deletions

View File

@ -86,8 +86,9 @@ func runAttach(dockerCli command.Cli, opts *attachOptions) error {
return err return err
} }
detachKeys := dockerCli.ConfigFile().DetachKeys
if opts.detachKeys != "" { if opts.detachKeys != "" {
dockerCli.ConfigFile().DetachKeys = opts.detachKeys detachKeys = opts.detachKeys
} }
options := types.ContainerAttachOptions{ options := types.ContainerAttachOptions{
@ -95,7 +96,7 @@ func runAttach(dockerCli command.Cli, opts *attachOptions) error {
Stdin: !opts.noStdin && c.Config.OpenStdin, Stdin: !opts.noStdin && c.Config.OpenStdin,
Stdout: true, Stdout: true,
Stderr: true, Stderr: true,
DetachKeys: dockerCli.ConfigFile().DetachKeys, DetachKeys: detachKeys,
} }
var in io.ReadCloser var in io.ReadCloser

View File

@ -169,11 +169,18 @@ func runContainer(dockerCli command.Cli, opts *runOptions, copts *containerOptio
} }
attach := config.AttachStdin || config.AttachStdout || config.AttachStderr attach := config.AttachStdin || config.AttachStdout || config.AttachStderr
if attach { if attach {
detachKeys := dockerCli.ConfigFile().DetachKeys
if opts.detachKeys != "" { if opts.detachKeys != "" {
dockerCli.ConfigFile().DetachKeys = opts.detachKeys detachKeys = opts.detachKeys
} }
closeFn, err := attachContainer(ctx, dockerCli, &errCh, config, containerID) closeFn, err := attachContainer(ctx, dockerCli, containerID, &errCh, config, types.ContainerAttachOptions{
Stream: true,
Stdin: config.AttachStdin,
Stdout: config.AttachStdout,
Stderr: config.AttachStderr,
DetachKeys: detachKeys,
})
if err != nil { if err != nil {
return err return err
} }
@ -232,15 +239,7 @@ func runContainer(dockerCli command.Cli, opts *runOptions, copts *containerOptio
return nil return nil
} }
func attachContainer(ctx context.Context, dockerCli command.Cli, errCh *chan error, config *container.Config, containerID string) (func(), error) { func attachContainer(ctx context.Context, dockerCli command.Cli, containerID string, errCh *chan error, config *container.Config, options types.ContainerAttachOptions) (func(), error) {
options := types.ContainerAttachOptions{
Stream: true,
Stdin: config.AttachStdin,
Stdout: config.AttachStdout,
Stderr: config.AttachStderr,
DetachKeys: dockerCli.ConfigFile().DetachKeys,
}
resp, errAttach := dockerCli.Client().ContainerAttach(ctx, containerID, options) resp, errAttach := dockerCli.Client().ContainerAttach(ctx, containerID, options)
if errAttach != nil { if errAttach != nil {
return nil, errAttach return nil, errAttach
@ -250,13 +249,13 @@ func attachContainer(ctx context.Context, dockerCli command.Cli, errCh *chan err
out, cerr io.Writer out, cerr io.Writer
in io.ReadCloser in io.ReadCloser
) )
if config.AttachStdin { if options.Stdin {
in = dockerCli.In() in = dockerCli.In()
} }
if config.AttachStdout { if options.Stdout {
out = dockerCli.Out() out = dockerCli.Out()
} }
if config.AttachStderr { if options.Stderr {
if config.Tty { if config.Tty {
cerr = dockerCli.Out() cerr = dockerCli.Out()
} else { } else {

View File

@ -94,8 +94,9 @@ func RunStart(dockerCli command.Cli, opts *StartOptions) error {
defer signal.StopCatch(sigc) defer signal.StopCatch(sigc)
} }
detachKeys := dockerCli.ConfigFile().DetachKeys
if opts.DetachKeys != "" { if opts.DetachKeys != "" {
dockerCli.ConfigFile().DetachKeys = opts.DetachKeys detachKeys = opts.DetachKeys
} }
options := types.ContainerAttachOptions{ options := types.ContainerAttachOptions{
@ -103,7 +104,7 @@ func RunStart(dockerCli command.Cli, opts *StartOptions) error {
Stdin: opts.OpenStdin && c.Config.OpenStdin, Stdin: opts.OpenStdin && c.Config.OpenStdin,
Stdout: true, Stdout: true,
Stderr: true, Stderr: true,
DetachKeys: dockerCli.ConfigFile().DetachKeys, DetachKeys: detachKeys,
} }
var in io.ReadCloser var in io.ReadCloser