cri: restart created container with correct io type
Signed-off-by: Abel Feng <fshb1988@gmail.com>
This commit is contained in:
		| @@ -257,7 +257,6 @@ func (c *criService) loadContainer(ctx context.Context, cntr containerd.Containe | ||||
| 	defer cancel() | ||||
| 	id := cntr.ID() | ||||
| 	containerDir := c.getContainerRootDir(id) | ||||
| 	volatileContainerDir := c.getVolatileContainerRootDir(id) | ||||
| 	var container containerstore.Container | ||||
| 	// Load container metadata. | ||||
| 	exts, err := cntr.Extensions(ctx) | ||||
| @@ -336,9 +335,7 @@ func (c *criService) loadContainer(ctx context.Context, cntr containerd.Containe | ||||
| 				// NOTE: Another possibility is that we've tried to start the container, but | ||||
| 				// containerd got restarted during that. In that case, we still | ||||
| 				// treat the container as `CREATED`. | ||||
| 				containerIO, err = cio.NewContainerIO(id, | ||||
| 					cio.WithNewFIFOs(volatileContainerDir, meta.Config.GetTty(), meta.Config.GetStdin()), | ||||
| 				) | ||||
| 				containerIO, err = c.createContainerIO(id, meta.SandboxID, meta.Config) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("failed to create container io: %w", err) | ||||
| 				} | ||||
| @@ -465,3 +462,31 @@ func cleanupOrphanedIDDirs(ctx context.Context, cntrs []containerd.Container, ba | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (c *criService) createContainerIO(containerID, sandboxID string, config *runtime.ContainerConfig) (*cio.ContainerIO, error) { | ||||
| 	if config == nil { | ||||
| 		return nil, fmt.Errorf("ContainerConfig should not be nil when create container io") | ||||
| 	} | ||||
| 	sb, err := c.sandboxStore.Get(sandboxID) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("an error occurred when try to find sandbox %q: %w", sandboxID, err) | ||||
| 	} | ||||
| 	ociRuntime, err := c.config.GetSandboxRuntime(sb.Config, sb.Metadata.RuntimeHandler) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to get sandbox runtime: %w", err) | ||||
| 	} | ||||
| 	var containerIO *cio.ContainerIO | ||||
| 	switch ociRuntime.IOType { | ||||
| 	case criconfig.IOTypeStreaming: | ||||
| 		containerIO, err = cio.NewContainerIO(containerID, | ||||
| 			cio.WithStreams(sb.Endpoint.Address, config.GetTty(), config.GetStdin())) | ||||
| 	default: | ||||
| 		volatileContainerRootDir := c.getVolatileContainerRootDir(containerID) | ||||
| 		containerIO, err = cio.NewContainerIO(containerID, | ||||
| 			cio.WithNewFIFOs(volatileContainerRootDir, config.GetTty(), config.GetStdin())) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to create container io: %w", err) | ||||
| 	} | ||||
| 	return containerIO, nil | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Abel Feng
					Abel Feng