@@ -163,6 +163,8 @@ type HostConfig struct {
163
163
Sysctls map [string ]string // List of Namespaced sysctls used for the container
164
164
Runtime string // Runtime to use with this container
165
165
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
166
168
}
167
169
168
170
// 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) {
292
294
// XXX is this always right? what if the container OS is NOT the same as the host OS?
293
295
Platform : runtime .GOOS , // for Docker compatibility, this Platform string does NOT contain arch like "/amd64"
294
296
}
297
+ c .HostConfig = new (HostConfig )
295
298
if n .Labels [restart .StatusLabel ] == string (containerd .Running ) {
296
299
c .RestartCount , _ = strconv .Atoi (n .Labels [restart .CountLabel ])
297
300
}
@@ -332,15 +335,20 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
332
335
}
333
336
}
334
337
338
+ var tmpfsMounts []MountPoint
339
+
335
340
if nerdctlMounts := n .Labels [labels .Mounts ]; nerdctlMounts != "" {
336
341
mounts , err := parseMounts (nerdctlMounts )
337
342
if err != nil {
338
343
return nil , err
339
344
}
340
345
c .Mounts = mounts
346
+ if len (mounts ) > 0 {
347
+ tmpfsMounts = filterTmpfsMounts (mounts )
348
+ }
341
349
}
350
+ c .HostConfig .Tmpfs = tmpfsMounts
342
351
343
- c .HostConfig = new (HostConfig )
344
352
if nedctlExtraHosts := n .Labels [labels .ExtraHosts ]; nedctlExtraHosts != "" {
345
353
c .HostConfig .ExtraHosts = parseExtraHosts (nedctlExtraHosts )
346
354
}
@@ -366,7 +374,7 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
366
374
}
367
375
368
376
// var hostConfigLabel HostConfigLabel
369
- hostConfigLabel , err := getHostConfigLabelFromNative (n .Labels )
377
+ hostConfigLabel , _ := getHostConfigLabelFromNative (n .Labels )
370
378
371
379
c .HostConfig .BlkioWeight = hostConfigLabel .BlkioWeight
372
380
c .HostConfig .ContainerIDFile = hostConfigLabel .CidFile
@@ -480,6 +488,11 @@ func ContainerFromNative(n *native.Container) (*Container, error) {
480
488
481
489
c .HostConfig .Devices = hostConfigLabel .DeviceMapping
482
490
491
+ var pidMode string
492
+ if n .Labels [labels .PIDContainer ] != "" {
493
+ pidMode = n .Labels [labels .PIDContainer ]
494
+ }
495
+ c .HostConfig .PidMode = pidMode
483
496
return c , nil
484
497
}
485
498
@@ -552,6 +565,18 @@ func mountsFromNative(spMounts []specs.Mount) []MountPoint {
552
565
return mountpoints
553
566
}
554
567
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
+
555
580
func statusFromNative (x containerd.Status , labels map [string ]string ) string {
556
581
switch s := x .Status ; s {
557
582
case containerd .Stopped :
@@ -801,15 +826,6 @@ func getSysctlFromNative(sp *specs.Spec) (map[string]string, error) {
801
826
return res , nil
802
827
}
803
828
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
-
813
829
type IPAMConfig struct {
814
830
Subnet string `json:"Subnet,omitempty"`
815
831
Gateway string `json:"Gateway,omitempty"`
0 commit comments