microsoft / microsoft/vscode-remote-release

dev-containers: include output from Annotations as an extension of Labels for running containers

Open
#8,626 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

containers feature-request podman
Dominant language
Dockerfile
Stars
4.2k
Forks
470
Avg merge
1d 1h
Merged PRs (30d)
1

Description

I, and a lot of Linux Fedora OSTree / zero trust desktop users, make use of podman and distrobox to create mutable environments for package management, etc. These use podman which emulates a majority of the docker primitives. Out of the box this works as expected - however, distrobox performs a set of additional UX actions that make it transparent to the end user the container they're running (container runs as root, but entering the container does proper uid/gid maps to the systems user account as well as mount HOME and other appropriate directories).

Due to how this runs, and given most "toolbox" containers are actually container images like docker.io/library/ubuntu, etc it's not possible to reliably use the label devcontainer.metadata. However, podman offers the ability to add Annotations to running containers and present that information in the inspect output. What this feature request is asking for is to check if an optional Config.Annotations key is available (at the same level as Labels is found) and merge those values into the Labels keys before evaluating any devcontainer.metadata. I've included an example of the docker inspect command run by Dev Containers 0.295.0 in VS Code 1.79.2

This would only affect using Dev Containers to connect to an already running container.

Snippet of Config showing both Labels and Annotations

               "Labels": {
                    "com.github.containers.toolbox": "true",
                    "io.artifacthub.package.readme-url": "https://raw.githubusercontent.com/ublue-os/boxkit/main/README.md",
                    "io.buildah.version": "1.23.1",
                    "maintainer": "jorge.castro@gmail.com",
                    "manager": "distrobox",
                    "name": "ubuntu-toolbox",
                    "org.opencontainers.image.created": "2023-06-20T22:24:26.642Z",
                    "org.opencontainers.image.description": "A familiar(ish) Ubuntu desktop for Fedora Silverblue",
                    "org.opencontainers.image.licenses": "Apache-2.0",
                    "org.opencontainers.image.ref.name": "ubuntu",
                    "org.opencontainers.image.revision": "93bde6348265f15e73cb2f2698c56d2aae8c06ba",
                    "org.opencontainers.image.source": "https://github.com/ublue-os/bluefin",
                    "org.opencontainers.image.title": "bluefin",
                    "org.opencontainers.image.url": "https://github.com/ublue-os/bluefin",
                    "org.opencontainers.image.version": "nightly",
                    "summary": "A cloud-native terminal experience",
                    "usage": "This image is meant to be used with the toolbox or distrobox command",
                    "version": "22.04"
               },
               "Annotations": {
                    "io.container.manager": "libpod",
                    "io.podman.annotations.label": "disable",
                    "io.podman.annotations.privileged": "TRUE",
                    "org.opencontainers.image.stopSignal": "15",
                    "run.oci.keep_original_groups": "1",
                    "devcontainer.metadata.remoteUser": "marco",
               },

Below is the full command output of the docker inspect command on a podman system running a distrobox created container.

~ $ docker inspect ubuntu
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
[
     {
          "Id": "f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05",
          "Created": "2023-06-20T22:56:52.667359334-04:00",
          "Path": "/usr/bin/entrypoint",
          "Args": [
               "-v",
               "--name",
               "marco",
               "--user",
               "1000",
               "--group",
               "1000",
               "--home",
               "/var/home/marco",
               "--init",
               "0",
               "--pre-init-hooks",
               "",
               "--",
               ""
          ],
          "State": {
               "OciVersion": "1.1.0-rc.1",
               "Status": "running",
               "Running": true,
               "Paused": false,
               "Restarting": false,
               "OOMKilled": false,
               "Dead": false,
               "Pid": 113736,
               "ConmonPid": 113734,
               "ExitCode": 0,
               "Error": "",
               "StartedAt": "2023-06-21T11:33:23.191009439-04:00",
               "FinishedAt": "2023-06-21T11:12:18.04886986-04:00",
               "Health": {
                    "Status": "",
                    "FailingStreak": 0,
                    "Log": null
               },
               "CgroupPath": "/user.slice/user-1000.slice/user@1000.service/user.slice/libpod-f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05.scope",
               "CheckpointedAt": "0001-01-01T00:00:00Z",
               "RestoredAt": "0001-01-01T00:00:00Z"
          },
          "Image": "009724e826a495baf226dd98e983f43ca10b24c0b87f186ab2fe458a1406cd21",
          "ImageDigest": "sha256:f534a81113676c7d19748c36d2a37ea6a5525536c586326eea0d4a1036ab3f61",
          "ImageName": "ghcr.io/ublue-os/ubuntu-toolbox:latest",
          "Rootfs": "",
          "Pod": "",
          "ResolvConfPath": "/run/user/1000/containers/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/resolv.conf",
          "HostnamePath": "/run/user/1000/containers/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/hostname",
          "HostsPath": "/run/user/1000/containers/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/hosts",
          "StaticDir": "/var/home/marco/.local/share/containers/storage/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata",
          "OCIConfigPath": "/var/home/marco/.local/share/containers/storage/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/config.json",
          "OCIRuntime": "crun",
          "ConmonPidFile": "/run/user/1000/containers/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/conmon.pid",
          "PidFile": "/run/user/1000/containers/overlay-containers/f8eb02dd9c6e639da4fac8a7496e4a72677c1e671207aee154b47f91c35a0b05/userdata/pidfile",
          "Name": "ubuntu",
          "RestartCount": 0,
          "Driver": "overlay",
          "MountLabel": "system_u:object_r:container_file_t:s0:c1022,c1023",
          "ProcessLabel": "",
          "AppArmorProfile": "",
          "EffectiveCaps": [
               "CAP_AUDIT_CONTROL",
               "CAP_AUDIT_READ",
               "CAP_AUDIT_WRITE",
               "CAP_BLOCK_SUSPEND",
               "CAP_BPF",
               "CAP_CHECKPOINT_RESTORE",
               "CAP_CHOWN",
               "CAP_DAC_OVERRIDE",
               "CAP_DAC_READ_SEARCH",
               "CAP_FOWNER",
               "CAP_FSETID",
               "CAP_IPC_LOCK",
               "CAP_IPC_OWNER",
               "CAP_KILL",
               "CAP_LEASE",
               "CAP_LINUX_IMMUTABLE",
               "CAP_MAC_ADMIN",
               "CAP_MAC_OVERRIDE",
               "CAP_MKNOD",
               "CAP_NET_ADMIN",
               "CAP_NET_BIND_SERVICE",
               "CAP_NET_BROADCAST",
               "CAP_NET_RAW",
               "CAP_PERFMON",
               "CAP_SETFCAP",
               "CAP_SETGID",
               "CAP_SETPCAP",
               "CAP_SETUID",
               "CAP_SYSLOG",
               "CAP_SYS_ADMIN",
               "CAP_SYS_BOOT",
               "CAP_SYS_CHROOT",
               "CAP_SYS_MODULE",
               "CAP_SYS_NICE",
               "CAP_SYS_PACCT",
               "CAP_SYS_PTRACE",
               "CAP_SYS_RAWIO",
               "CAP_SYS_RESOURCE",
               "CAP_SYS_TIME",
               "CAP_SYS_TTY_CONFIG",
               "CAP_WAKE_ALARM"
          ],
          "BoundingCaps": [
               "CAP_AUDIT_CONTROL",
               "CAP_AUDIT_READ",
               "CAP_AUDIT_WRITE",
               "CAP_BLOCK_SUSPEND",
               "CAP_BPF",
               "CAP_CHECKPOINT_RESTORE",
               "CAP_CHOWN",
               "CAP_DAC_OVERRIDE",
               "CAP_DAC_READ_SEARCH",
               "CAP_FOWNER",
               "CAP_FSETID",
               "CAP_IPC_LOCK",
               "CAP_IPC_OWNER",
               "CAP_KILL",
               "CAP_LEASE",
               "CAP_LINUX_IMMUTABLE",
               "CAP_MAC_ADMIN",
               "CAP_MAC_OVERRIDE",
               "CAP_MKNOD",
               "CAP_NET_ADMIN",
               "CAP_NET_BIND_SERVICE",
               "CAP_NET_BROADCAST",
               "CAP_NET_RAW",
               "CAP_PERFMON",
               "CAP_SETFCAP",
               "CAP_SETGID",
               "CAP_SETPCAP",
               "CAP_SETUID",
               "CAP_SYSLOG",
               "CAP_SYS_ADMIN",
               "CAP_SYS_BOOT",
               "CAP_SYS_CHROOT",
               "CAP_SYS_MODULE",
               "CAP_SYS_NICE",
               "CAP_SYS_PACCT",
               "CAP_SYS_PTRACE",
               "CAP_SYS_RAWIO",
               "CAP_SYS_RESOURCE",
               "CAP_SYS_TIME",
               "CAP_SYS_TTY_CONFIG",
               "CAP_WAKE_ALARM"
          ],
          "ExecIDs": [
               "7ef25334fca5faaf4d3efb521fce5ca9829d9367bb86abd4ea99b806506065b9",
               "fe678b34649432545bb19de73d463039d4354568c0028a6b46cd4e06b16cc07e",
               "09db5e64af11db57875277e9fb0440f1f74e804a4e5f551ca07bcddad0db54d4",
               "7cbb99e1bc1114b72c4c60f60d421e907069d3e63333ce5e833555589ad9a9cc",
               "8d9bf241566851e1738ad818ff61e3fa305cbe407fe175c9fa96a337634d2947",
               "9fea63ded38effe70747b1cedbd11377e0f6aa46fb6e74415001165ac7d08135",
               "a822d4d37c3830aa0b913131d5f66ae48d9699b76deb3bbb1e42a082f6ab72de",
               "50e944700aa3c0af1c83de1dce7dcdf1792f1b3616e46e1cb55fe4b7915cf982",
               "7e975aa91812a4665a499702189892dc2af7fd1a44ab3fbc0c4f077fe338cd18"
          ],
          "GraphDriver": {
               "Name": "overlay",
               "Data": {
                    "LowerDir": "/var/home/marco/.local/share/containers/storage/overlay/a6ee2dca1f674ca9c5ce9d71c2ed45bf4b6567db17f64e1bd73aa0b4df161066/diff:/var/home/marco/.local/share/containers/storage/overlay/9edd7520ec49dd8568608a5ba71619749c5d1340526d9476d87a79347b29953f/diff:/var/home/marco/.local/share/containers/storage/overlay/b381e7c7943e96245b5808907a51de7cdab773dbbb8aac5ccd3392af7156e277/diff:/var/home/marco/.local/share/containers/storage/overlay/8f1c4a1ebbc4c84e7e53de5833b3a297011b18befc1f2ed29a7e70fb349a638f/diff:/var/home/marco/.local/share/containers/storage/overlay/630c560e98fa92797381a81e0a568b6b34414e09e6243a6f911dd374d401a978/diff:/var/home/marco/.local/share/containers/storage/overlay/f5eb23ebf19f653917d320cd9d4cc65783858fa1bca6652ab9976df8ef188339/diff:/var/home/marco/.local/share/containers/storage/overlay/850d33f1eeae1362d806718c9acbb36dfc961156b3102556474c057552d70370/diff:/var/home/marco/.local/share/containers/storage/overlay/f606c62fe07ff9f7a9ed57ce6aa6f1eca848c6bf03ef7a174f9bc6d9f31d851e/diff:/var/home/marco/.local/share/containers/storage/overlay/18aef69f315dc2d10d9a1f297f9ea414264270d7525aa6bb3927a4c36fc1eecb/diff:/var/home/marco/.local/share/containers/storage/overlay/cdd7c73923174e45ea648d66996665c288e1b17a0f45efdbeca860f6dafdf731/diff",
                    "MergedDir": "/var/home/marco/.local/share/containers/storage/overlay/50a755db74c0c8742fd794aa1c3ac72c70f9e951396954c914b120568e07faa7/merged",
                    "UpperDir": "/var/home/marco/.local/share/containers/storage/overlay/50a755db74c0c8742fd794aa1c3ac72c70f9e951396954c914b120568e07faa7/diff",
                    "WorkDir": "/var/home/marco/.local/share/containers/storage/overlay/50a755db74c0c8742fd794aa1c3ac72c70f9e951396954c914b120568e07faa7/work"
               }
          },
          "Mounts": [
               {
                    "Type": "volume",
                    "Name": "30f5efc90bc53050156e8713ec1881f14f22c62d0b8231393b192292f14192a9",
                    "Source": "/var/home/marco/.local/share/containers/storage/volumes/30f5efc90bc53050156e8713ec1881f14f22c62d0b8231393b192292f14192a9/_data",
                    "Destination": "/sys/fs/selinux",
                    "Driver": "local",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "volume",
                    "Name": "4e11a5608a22f573e765e4bf1e5d9bd4aed8750bb51fdc218b4727b3a4c4b453",
                    "Source": "/var/home/marco/.local/share/containers/storage/volumes/4e11a5608a22f573e765e4bf1e5d9bd4aed8750bb51fdc218b4727b3a4c4b453/_data",
                    "Destination": "/var/log/journal",
                    "Driver": "local",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/sys",
                    "Destination": "/sys",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "noexec",
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "/tmp",
                    "Destination": "/tmp",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "/var/home/marco",
                    "Destination": "/var/home/marco",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "/etc/hosts",
                    "Destination": "/etc/hosts",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/etc/localtime",
                    "Destination": "/etc/localtime",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/",
                    "Destination": "/run/host",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "/dev",
                    "Destination": "/dev",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "devpts",
                    "Destination": "/dev/pts",
                    "Driver": "",
                    "Mode": "",
                    "Options": [],
                    "RW": true,
                    "Propagation": ""
               },
               {
                    "Type": "bind",
                    "Source": "/run/user/1000",
                    "Destination": "/run/user/1000",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rslave"
               },
               {
                    "Type": "bind",
                    "Source": "/usr/bin/distrobox-init",
                    "Destination": "/usr/bin/entrypoint",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/usr/bin/distrobox-export",
                    "Destination": "/usr/bin/distrobox-export",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/etc/resolv.conf",
                    "Destination": "/etc/resolv.conf",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "nosuid",
                         "nodev",
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/usr/bin/distrobox-host-exec",
                    "Destination": "/usr/bin/distrobox-host-exec",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               }
          ],
          "Dependencies": [],
          "NetworkSettings": {
               "EndpointID": "",
               "Gateway": "",
               "IPAddress": "",
               "IPPrefixLen": 0,
               "IPv6Gateway": "",
               "GlobalIPv6Address": "",
               "GlobalIPv6PrefixLen": 0,
               "MacAddress": "",
               "Bridge": "",
               "SandboxID": "",
               "HairpinMode": false,
               "LinkLocalIPv6Address": "",
               "LinkLocalIPv6PrefixLen": 0,
               "Ports": {},
               "SandboxKey": "",
               "Networks": {
                    "host": {
                         "EndpointID": "",
                         "Gateway": "",
                         "IPAddress": "",
                         "IPPrefixLen": 0,
                         "IPv6Gateway": "",
                         "GlobalIPv6Address": "",
                         "GlobalIPv6PrefixLen": 0,
                         "MacAddress": "",
                         "NetworkID": "host",
                         "DriverOpts": null,
                         "IPAMConfig": null,
                         "Links": null
                    }
               }
          },
          "Namespace": "",
          "IsInfra": false,
          "IsService": false,
          "Config": {
               "Hostname": "ubuntu.fedora",
               "Domainname": "",
               "User": "root:root",
               "AttachStdin": false,
               "AttachStdout": false,
               "AttachStderr": false,
               "Tty": false,
               "OpenStdin": false,
               "StdinOnce": false,
               "Env": [
                    "HOME=/var/home/marco",
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "TERM=xterm",
                    "container=podman",
                    "SHELL=/bin/bash",
                    "HOSTNAME=ubuntu.fedora"
               ],
               "Cmd": [
                    "-v",
                    "--name",
                    "marco",
                    "--user",
                    "1000",
                    "--group",
                    "1000",
                    "--home",
                    "/var/home/marco",
                    "--init",
                    "0",
                    "--pre-init-hooks",
                    "",
                    "--",
                    ""
               ],
               "Image": "ghcr.io/ublue-os/ubuntu-toolbox:latest",
               "Volumes": null,
               "WorkingDir": "/",
               "Entrypoint": "/usr/bin/entrypoint",
               "OnBuild": null,
               "Labels": {
                    "com.github.containers.toolbox": "true",
                    "io.artifacthub.package.readme-url": "https://raw.githubusercontent.com/ublue-os/boxkit/main/README.md",
                    "io.buildah.version": "1.23.1",
                    "maintainer": "jorge.castro@gmail.com",
                    "manager": "distrobox",
                    "name": "ubuntu-toolbox",
                    "org.opencontainers.image.created": "2023-06-20T22:24:26.642Z",
                    "org.opencontainers.image.description": "A familiar(ish) Ubuntu desktop for Fedora Silverblue",
                    "org.opencontainers.image.licenses": "Apache-2.0",
                    "org.opencontainers.image.ref.name": "ubuntu",
                    "org.opencontainers.image.revision": "93bde6348265f15e73cb2f2698c56d2aae8c06ba",
                    "org.opencontainers.image.source": "https://github.com/ublue-os/bluefin",
                    "org.opencontainers.image.title": "bluefin",
                    "org.opencontainers.image.url": "https://github.com/ublue-os/bluefin",
                    "org.opencontainers.image.version": "nightly",
                    "summary": "A cloud-native terminal experience",
                    "usage": "This image is meant to be used with the toolbox or distrobox command",
                    "version": "22.04"
               },
               "Annotations": {
                    "io.container.manager": "libpod",
                    "io.podman.annotations.label": "disable",
                    "io.podman.annotations.privileged": "TRUE",
                    "org.opencontainers.image.stopSignal": "15",
                    "run.oci.keep_original_groups": "1",
                    "devcontainer.metadata.remoteUser": "marco",
               },
               "StopSignal": 15,
               "HealthcheckOnFailureAction": "none",
               "CreateCommand": [
                    "podman",
                    "create",
                    "--hostname",
                    "ubuntu.fedora",
                    "--ipc",
                    "host",
                    "--name",
                    "ubuntu",
                    "--network",
                    "host",
                    "--privileged",
                    "--security-opt",
                    "label=disable",
                    "--user",
                    "root:root",
                    "--pid",
                    "host",
                    "--label",
                    "manager=distrobox",
                    "--env",
                    "SHELL=/bin/bash",
                    "--env",
                    "HOME=/var/home/marco",
                    "--volume",
                    "/:/run/host:rslave",
                    "--volume",
                    "/dev:/dev:rslave",
                    "--volume",
                    "/sys:/sys:rslave",
                    "--volume",
                    "/tmp:/tmp:rslave",
                    "--volume",
                    "/usr/bin/distrobox-init:/usr/bin/entrypoint:ro",
                    "--volume",
                    "/usr/bin/distrobox-export:/usr/bin/distrobox-export:ro",
                    "--volume",
                    "/usr/bin/distrobox-host-exec:/usr/bin/distrobox-host-exec:ro",
                    "--volume",
                    "/var/home/marco:/var/home/marco:rslave",
                    "--volume",
                    "/sys/fs/selinux",
                    "--volume",
                    "/var/log/journal",
                    "--volume",
                    "/run/user/1000:/run/user/1000:rslave",
                    "--volume",
                    "/etc/hosts:/etc/hosts:ro",
                    "--volume",
                    "/etc/localtime:/etc/localtime:ro",
                    "--volume",
                    "/etc/resolv.conf:/etc/resolv.conf:ro",
                    "--ulimit",
                    "host",
                    "--annotation",
                    "run.oci.keep_original_groups=1",
                    "--mount",
                    "type=devpts,destination=/dev/pts",
                    "--userns",
                    "keep-id",
                    "--entrypoint",
                    "/usr/bin/entrypoint",
                    "ghcr.io/ublue-os/ubuntu-toolbox:latest",
                    "-v",
                    "--name",
                    "marco",
                    "--user",
                    "1000",
                    "--group",
                    "1000",
                    "--home",
                    "/var/home/marco",
                    "--init",
                    "0",
                    "--pre-init-hooks",
                    "",
                    "--",
                    ""
               ],
               "Umask": "0022",
               "Timeout": 0,
               "StopTimeout": 10,
               "Passwd": true,
               "sdNotifyMode": "container"
          },
          "HostConfig": {
               "Binds": [
                    "30f5efc90bc53050156e8713ec1881f14f22c62d0b8231393b192292f14192a9:/sys/fs/selinux:rw,rprivate,nosuid,nodev,rbind",
                    "4e11a5608a22f573e765e4bf1e5d9bd4aed8750bb51fdc218b4727b3a4c4b453:/var/log/journal:rw,rprivate,nosuid,nodev,rbind",
                    "/sys:/sys:rslave,rw,noexec,nosuid,nodev,rbind",
                    "/tmp:/tmp:rslave,rw,nosuid,nodev,rbind",
                    "/var/home/marco:/var/home/marco:rslave,rw,rbind",
                    "/etc/hosts:/etc/hosts:ro,rprivate,rbind",
                    "/etc/localtime:/etc/localtime:ro,rprivate,rbind",
                    "/:/run/host:rslave,rw,rbind",
                    "/dev:/dev:rslave,rw,nosuid,rbind",
                    "devpts:/dev/pts",
                    "/run/user/1000:/run/user/1000:rslave,rw,nosuid,nodev,rbind",
                    "/usr/bin/distrobox-init:/usr/bin/entrypoint:ro,rprivate,rbind",
                    "/usr/bin/distrobox-export:/usr/bin/distrobox-export:ro,rprivate,rbind",
                    "/etc/resolv.conf:/etc/resolv.conf:ro,rprivate,nosuid,nodev,rbind",
                    "/usr/bin/distrobox-host-exec:/usr/bin/distrobox-host-exec:ro,rprivate,rbind"
               ],
               "CgroupManager": "systemd",
               "CgroupMode": "private",
               "ContainerIDFile": "",
               "LogConfig": {
                    "Type": "journald",
                    "Config": null,
                    "Path": "",
                    "Tag": "",
                    "Size": "0B"
               },
               "NetworkMode": "host",
               "PortBindings": {},
               "RestartPolicy": {
                    "Name": "",
                    "MaximumRetryCount": 0
               },
               "AutoRemove": false,
               "VolumeDriver": "",
               "VolumesFrom": null,
               "CapAdd": [],
               "CapDrop": [],
               "Dns": [],
               "DnsOptions": [],
               "DnsSearch": [],
               "ExtraHosts": [],
               "GroupAdd": [],
               "IpcMode": "host",
               "Cgroup": "",
               "Cgroups": "default",
               "Links": null,
               "OomScoreAdj": 0,
               "PidMode": "host",
               "Privileged": true,
               "PublishAllPorts": false,
               "ReadonlyRootfs": false,
               "SecurityOpt": [
                    "label=disable"
               ],
               "Tmpfs": {},
               "UTSMode": "private",
               "UsernsMode": "private",
               "IDMappings": {
                    "UidMap": [
                         "0:1:1000",
                         "1000:0:1",
                         "1001:1001:64536"
                    ],
                    "GidMap": [
                         "0:1:1000",
                         "1000:0:1",
                         "1001:1001:64536"
                    ]
               },
               "ShmSize": 65536000,
               "Runtime": "oci",
               "ConsoleSize": [
                    0,
                    0
               ],
               "Isolation": "",
               "CpuShares": 0,
               "Memory": 0,
               "NanoCpus": 0,
               "CgroupParent": "user.slice",
               "BlkioWeight": 0,
               "BlkioWeightDevice": null,
               "BlkioDeviceReadBps": null,
               "BlkioDeviceWriteBps": null,
               "BlkioDeviceReadIOps": null,
               "BlkioDeviceWriteIOps": null,
               "CpuPeriod": 0,
               "CpuQuota": 0,
               "CpuRealtimePeriod": 0,
               "CpuRealtimeRuntime": 0,
               "CpusetCpus": "",
               "CpusetMems": "",
               "Devices": [],
               "DiskQuota": 0,
               "KernelMemory": 0,
               "MemoryReservation": 0,
               "MemorySwap": 0,
               "MemorySwappiness": 0,
               "OomKillDisable": false,
               "PidsLimit": 2048,
               "Ulimits": [
                    {
                         "Name": "RLIMIT_NOFILE",
                         "Soft": 524288,
                         "Hard": 524288
                    },
                    {
                         "Name": "RLIMIT_NPROC",
                         "Soft": 124836,
                         "Hard": 124836
                    }
               ],
               "CpuCount": 0,
               "CpuPercent": 0,
               "IOMaximumIOps": 0,
               "IOMaximumBandwidth": 0,
               "CgroupConf": null
          }
     }
]

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the existing handling of container inspect output, especially Config.Labels and the optional Config.Annotations entry. Verify how devcontainer.metadata is evaluated for an already running container, then confirm that metadata supplied through Annotations is recognized without changing existing label behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker
Domain
devops
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.