run must attach to stdin

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2021-09-23 09:30:00 +02:00 committed by Nicolas De loof
parent 1ec997270d
commit 07b5512a68
4 changed files with 14 additions and 13 deletions

View File

@ -170,7 +170,8 @@ func normalizeRunFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
} }
func notAtTTY() bool { func notAtTTY() bool {
return !isatty.IsTerminal(os.Stdout.Fd()) b := isatty.IsTerminal(os.Stdout.Fd()) && isatty.IsTerminal(os.Stdin.Fd())
return !b
} }
func runRun(ctx context.Context, backend api.Service, project *types.Project, opts runOptions) error { func runRun(ctx context.Context, backend api.Service, project *types.Project, opts runOptions) error {

View File

@ -232,7 +232,7 @@ func (c *convergence) ensureService(ctx context.Context, project *types.Project,
name := getContainerName(project.Name, service, number) name := getContainerName(project.Name, service, number)
i := i i := i
eg.Go(func() error { eg.Go(func() error {
container, err := c.service.createContainer(ctx, project, service, name, number, false, true) container, err := c.service.createContainer(ctx, project, service, name, number, false, true, false)
updated[actual+i] = container updated[actual+i] = container
return err return err
}) })
@ -327,11 +327,11 @@ func getScale(config types.ServiceConfig) (int, error) {
} }
func (s *composeService) createContainer(ctx context.Context, project *types.Project, service types.ServiceConfig, func (s *composeService) createContainer(ctx context.Context, project *types.Project, service types.ServiceConfig,
name string, number int, autoRemove bool, useNetworkAliases bool) (container moby.Container, err error) { name string, number int, autoRemove bool, useNetworkAliases bool, attachStdin bool) (container moby.Container, err error) {
w := progress.ContextWriter(ctx) w := progress.ContextWriter(ctx)
eventName := "Container " + name eventName := "Container " + name
w.Event(progress.CreatingEvent(eventName)) w.Event(progress.CreatingEvent(eventName))
container, err = s.createMobyContainer(ctx, project, service, name, number, nil, autoRemove, useNetworkAliases) container, err = s.createMobyContainer(ctx, project, service, name, number, nil, autoRemove, useNetworkAliases, attachStdin)
if err != nil { if err != nil {
return return
} }
@ -364,7 +364,7 @@ func (s *composeService) recreateContainer(ctx context.Context, project *types.P
inherited = &replaced inherited = &replaced
} }
name = getContainerName(project.Name, service, number) name = getContainerName(project.Name, service, number)
created, err = s.createMobyContainer(ctx, project, service, name, number, inherited, false, true) created, err = s.createMobyContainer(ctx, project, service, name, number, inherited, false, true, false)
if err != nil { if err != nil {
return created, err return created, err
} }
@ -402,9 +402,9 @@ func (s *composeService) startContainer(ctx context.Context, container moby.Cont
} }
func (s *composeService) createMobyContainer(ctx context.Context, project *types.Project, service types.ServiceConfig, func (s *composeService) createMobyContainer(ctx context.Context, project *types.Project, service types.ServiceConfig,
name string, number int, inherit *moby.Container, autoRemove bool, useNetworkAliases bool) (moby.Container, error) { name string, number int, inherit *moby.Container, autoRemove bool, useNetworkAliases bool, attachStdin bool) (moby.Container, error) {
var created moby.Container var created moby.Container
containerConfig, hostConfig, networkingConfig, err := s.getCreateOptions(ctx, project, service, number, inherit, autoRemove) containerConfig, hostConfig, networkingConfig, err := s.getCreateOptions(ctx, project, service, number, inherit, autoRemove, attachStdin)
if err != nil { if err != nil {
return created, err return created, err
} }

View File

@ -226,8 +226,8 @@ func getImageName(service types.ServiceConfig, projectName string) string {
return imageName return imageName
} }
func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project, service types.ServiceConfig, number int, inherit *moby.Container, func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project, service types.ServiceConfig,
autoRemove bool) (*container.Config, *container.HostConfig, *network.NetworkingConfig, error) { number int, inherit *moby.Container, autoRemove bool, attachStdin bool) (*container.Config, *container.HostConfig, *network.NetworkingConfig, error) {
labels, err := s.prepareLabels(p, service, number) labels, err := s.prepareLabels(p, service, number)
if err != nil { if err != nil {
@ -248,7 +248,6 @@ func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project,
var ( var (
tty = service.Tty tty = service.Tty
stdinOpen = service.StdinOpen stdinOpen = service.StdinOpen
attachStdin = false
) )
volumeMounts, binds, mounts, err := s.buildContainerVolumes(ctx, *p, service, inherit) volumeMounts, binds, mounts, err := s.buildContainerVolumes(ctx, *p, service, inherit)

View File

@ -164,7 +164,7 @@ func (s *composeService) prepareRun(ctx context.Context, project *types.Project,
return "", err return "", err
} }
} }
created, err := s.createContainer(ctx, project, service, service.ContainerName, 1, opts.Detach && opts.AutoRemove, opts.UseNetworkAliases) created, err := s.createContainer(ctx, project, service, service.ContainerName, 1, opts.Detach && opts.AutoRemove, opts.UseNetworkAliases, true)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -186,6 +186,7 @@ func (s *composeService) getEscapeKeyProxy(r io.ReadCloser) (io.ReadCloser, erro
func applyRunOptions(project *types.Project, service *types.ServiceConfig, opts api.RunOptions) { func applyRunOptions(project *types.Project, service *types.ServiceConfig, opts api.RunOptions) {
service.Tty = opts.Tty service.Tty = opts.Tty
service.StdinOpen = true
service.ContainerName = opts.Name service.ContainerName = opts.Name
if len(opts.Command) > 0 { if len(opts.Command) > 0 {