diff --git a/pkg/server/container_create.go b/pkg/server/container_create.go index a77bd1ef2..51c9aa79a 100644 --- a/pkg/server/container_create.go +++ b/pkg/server/container_create.go @@ -202,6 +202,11 @@ func (c *criContainerdService) generateContainerSpec(id string, sandboxPid uint3 g.SetProcessCwd(imageConfig.WorkingDir) } + g.SetProcessTerminal(config.GetTty()) + if config.GetTty() { + g.AddProcessEnv("TERM", "xterm") + } + // Apply envs from image config first, so that envs from container config // can override them. if err := addImageEnvs(&g, imageConfig.Env); err != nil { @@ -230,8 +235,6 @@ func (c *criContainerdService) generateContainerSpec(id string, sandboxPid uint3 g.SetLinuxCgroupsPath(cgroupsPath) } - g.SetProcessTerminal(config.GetTty()) - if err := setOCICapabilities(&g, securityContext.GetCapabilities(), securityContext.GetPrivileged()); err != nil { return nil, fmt.Errorf("failed to set capabilities %+v: %v", securityContext.GetCapabilities(), err) diff --git a/pkg/server/container_create_test.go b/pkg/server/container_create_test.go index 86420db2b..56e7e6405 100644 --- a/pkg/server/container_create_test.go +++ b/pkg/server/container_create_test.go @@ -191,6 +191,11 @@ func TestContainerSpecTty(t *testing.T) { assert.NoError(t, err) specCheck(t, testID, testPid, spec) assert.Equal(t, tty, spec.Process.Terminal) + if tty { + assert.Contains(t, spec.Process.Env, "TERM=xterm") + } else { + assert.NotContains(t, spec.Process.Env, "TERM=xterm") + } } }