@@ -163,6 +163,8 @@ type HostConfig struct {
163163 Sysctls map [string ]string // List of Namespaced sysctls used for the container
164164 Runtime string // Runtime to use with this container
165165 Devices []string // List of devices to map inside the container
166+ PidMode string // PID namespace to use for the container
167+ Tmpfs []MountPoint `json:",omitempty"` // List of tmpfs (mounts) used for the container
166168}
167169
168170// From https://github.com/moby/moby/blob/v20.10.1/api/types/types.go#L416-L427
@@ -292,6 +294,7 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
292294 // XXX is this always right? what if the container OS is NOT the same as the host OS?
293295 Platform : runtime .GOOS , // for Docker compatibility, this Platform string does NOT contain arch like "/amd64"
294296 }
297+ c .HostConfig = new (HostConfig )
295298 if n .Labels [restart .StatusLabel ] == string (containerd .Running ) {
296299 c .RestartCount , _ = strconv .Atoi (n .Labels [restart .CountLabel ])
297300 }
@@ -332,15 +335,20 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
332335 }
333336 }
334337
338+ var tmpfsMounts []MountPoint
339+
335340 if nerdctlMounts := n .Labels [labels .Mounts ]; nerdctlMounts != "" {
336341 mounts , err := parseMounts (nerdctlMounts )
337342 if err != nil {
338343 return nil , err
339344 }
340345 c .Mounts = mounts
346+ if len (mounts ) > 0 {
347+ tmpfsMounts = filterTmpfsMounts (mounts )
348+ }
341349 }
350+ c .HostConfig .Tmpfs = tmpfsMounts
342351
343- c .HostConfig = new (HostConfig )
344352 if nedctlExtraHosts := n .Labels [labels .ExtraHosts ]; nedctlExtraHosts != "" {
345353 c .HostConfig .ExtraHosts = parseExtraHosts (nedctlExtraHosts )
346354 }
@@ -366,7 +374,7 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
366374 }
367375
368376 // var hostConfigLabel HostConfigLabel
369- hostConfigLabel , err := getHostConfigLabelFromNative (n .Labels )
377+ hostConfigLabel , _ := getHostConfigLabelFromNative (n .Labels )
370378
371379 c .HostConfig .BlkioWeight = hostConfigLabel .BlkioWeight
372380 c .HostConfig .ContainerIDFile = hostConfigLabel .CidFile
@@ -480,6 +488,11 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
480488
481489 c .HostConfig .Devices = hostConfigLabel .DeviceMapping
482490
491+ var pidMode string
492+ if n .Labels [labels .PIDContainer ] != "" {
493+ pidMode = n .Labels [labels .PIDContainer ]
494+ }
495+ c .HostConfig .PidMode = pidMode
483496 return c , nil
484497}
485498
@@ -552,6 +565,18 @@ func mountsFromNative(spMounts []specs.Mount) []MountPoint {
552565 return mountpoints
553566}
554567
568+ // filterTmpfsMounts filters the tmpfs mounts
569+ func filterTmpfsMounts (spMounts []MountPoint ) []MountPoint {
570+ mountpoints := make ([]MountPoint , 0 , len (spMounts ))
571+ for _ , m := range spMounts {
572+ if m .Type == "tmpfs" {
573+ mountpoints = append (mountpoints , m )
574+ }
575+ }
576+
577+ return mountpoints
578+ }
579+
555580func statusFromNative (x containerd.Status , labels map [string ]string ) string {
556581 switch s := x .Status ; s {
557582 case containerd .Stopped :
@@ -801,15 +826,6 @@ func getSysctlFromNative(sp *specs.Spec) (map[string]string, error) {
801826 return res , nil
802827}
803828
804- func parseDeviceMapping (deviceMappingJSON string ) ([]string , error ) {
805- var devices []string
806- err := json .Unmarshal ([]byte (deviceMappingJSON ), & devices )
807- if err != nil {
808- return nil , fmt .Errorf ("failed to parse device mapping: %v" , err )
809- }
810- return devices , nil
811- }
812-
813829type IPAMConfig struct {
814830 Subnet string `json:"Subnet,omitempty"`
815831 Gateway string `json:"Gateway,omitempty"`
0 commit comments