Not able to "bundle" my container into an easy build

Here’s my full verbose logs of my working example:

$ torizoncore-builder --verbose bundle --force --dind-param="--insecure-registry=localhost:5000" docker-compose.yml
2026-05-28 18:49:55,459 - torizon.tcbuilder.cli.bundle - DEBUG - Removing existing bundle directory 'bundle'
2026-05-28 18:49:55,459 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,460 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,461 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,461 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,476 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /version HTTP/1.1" 200 853
2026-05-28 18:49:55,479 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/json?limit=-1&all=0&size=0&trunc_cmd=0&filters=%7B%22name%22%3A+%5B%22tcb_1779994194%22%5D%7D HTTP/1.1" 200 1754
2026-05-28 18:49:55,483 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a/json HTTP/1.1" 200 None
2026-05-28 18:49:55,484 - torizon.tcbuilder.backend.common - DEBUG - Current container ID (found by container name): e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a
2026-05-28 18:49:55,487 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a/json HTTP/1.1" 200 None
2026-05-28 18:49:55,488 - torizon.tcbuilder.cli.bundle - INFO - Creating Docker Container bundle...
2026-05-28 18:49:55,488 - torizon.tcbuilder.backend.bundle - INFO - NOTE: TCB no longer expands environment variables present in the compose file.
2026-05-28 18:49:55,489 - torizon.tcbuilder.backend.bundle - DEBUG - recursive_yaml_value_check: Call with obj <class 'dict'>. Checking config values in ''
2026-05-28 18:49:55,489 - torizon.tcbuilder.backend.bundle - DEBUG - recursive_yaml_value_check: Call with obj <class 'str'>. Checking config values in '/version'
2026-05-28 18:49:55,490 - torizon.tcbuilder.backend.bundle - DEBUG - recursive_yaml_value_check: Call with obj <class 'dict'>. Checking config values in '/services'
2026-05-28 18:49:55,490 - torizon.tcbuilder.backend.bundle - DEBUG - recursive_yaml_value_check: Call with obj <class 'dict'>. Checking config values in '/services/hello-world'
2026-05-28 18:49:55,490 - torizon.tcbuilder.backend.bundle - DEBUG - recursive_yaml_value_check: Call with obj <class 'str'>. Checking config values in '/services/hello-world/image'
2026-05-28 18:49:55,490 - torizon.tcbuilder.backend.bundle - DEBUG - Using DindManager
2026-05-28 18:49:55,491 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,491 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,491 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,491 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,507 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /version HTTP/1.1" 200 853
2026-05-28 18:49:55,526 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/info HTTP/1.1" 200 None
2026-05-28 18:49:55,527 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,527 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,527 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:55,527 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:55,541 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /version HTTP/1.1" 200 853
2026-05-28 18:49:55,547 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/json?limit=-1&all=0&size=0&trunc_cmd=0&filters=%7B%22name%22%3A+%5B%22tcb_1779994194%22%5D%7D HTTP/1.1" 200 1754
2026-05-28 18:49:55,550 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a/json HTTP/1.1" 200 None
2026-05-28 18:49:55,551 - torizon.tcbuilder.backend.common - DEBUG - Current container ID (found by container name): e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a
2026-05-28 18:49:55,554 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/e760bc9dc48f18221ce1a8a6aa8136316c866a62530276acbf58e0ef6da1a11a/json HTTP/1.1" 200 None
2026-05-28 18:49:55,555 - torizon.tcbuilder.backend.bundle - INFO -
Starting DIND container
2026-05-28 18:49:55,556 - torizon.tcbuilder.backend.bundle - INFO - Using Docker host "tcp://127.0.0.1:22376"
2026-05-28 18:49:55,562 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/volumes/create HTTP/1.1" 201 182
2026-05-28 18:49:55,563 - torizon.tcbuilder.backend.bundle - DEBUG - Volume mapping for DinD: [{'Target': '/workdir/', 'Source': '/home/jeremiascordoba/builder-test', 'Type': 'bind', 'ReadOnly': False}, {'Target': '/var/lib/docker/', 'Source': 'dind-volume', 'Type': 'volume', 'ReadOnly': False}]
2026-05-28 18:49:55,563 - torizon.tcbuilder.backend.bundle - DEBUG - Environment variables for DinD: {'DOCKER_TLS_CERTDIR': '/workdir/certs_20260528184955_490683.tmp'}
2026-05-28 18:49:55,563 - torizon.tcbuilder.backend.bundle - DEBUG - Running DinD container: ports=None, network=host
2026-05-28 18:49:55,626 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/create?name=tcb-fetch-dind HTTP/1.1" 201 88
2026-05-28 18:49:55,629 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed/json HTTP/1.1" 200 None
2026-05-28 18:49:55,834 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed/start HTTP/1.1" 204 0
2026-05-28 18:49:58,838 - torizon.tcbuilder.backend.bundle - INFO - Connecting to Docker Daemon at "tcp://127.0.0.1:22376"
2026-05-28 18:49:58,838 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:58,838 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:58,838 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:58,838 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:58,840 - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): 127.0.0.1:22376
2026-05-28 18:49:59,165 - urllib3.connectionpool - DEBUG - https://127.0.0.1:22376 "GET /version HTTP/1.1" 200 855
2026-05-28 18:49:59,165 - torizon.tcbuilder.backend.bundle - INFO - Fetching container image localhost:5000/hello-world:latest in service hello-world
2026-05-28 18:49:59,165 - docker.auth - DEBUG - Looking for auth config
2026-05-28 18:49:59,166 - docker.auth - DEBUG - No auth config in memory - loading from filesystem
2026-05-28 18:49:59,166 - docker.utils.config - DEBUG - Trying paths: ['/root/.docker/config.json', '/root/.dockercfg']
2026-05-28 18:49:59,166 - docker.utils.config - DEBUG - No config file found
2026-05-28 18:49:59,166 - docker.auth - DEBUG - Looking for auth entry for 'localhost:5000'
2026-05-28 18:49:59,166 - docker.auth - DEBUG - No entry found
2026-05-28 18:49:59,166 - docker.auth - DEBUG - No auth config found
2026-05-28 18:49:59,228 - urllib3.connectionpool - DEBUG - https://127.0.0.1:22376 "POST /v1.44/images/create?tag=latest&fromImage=localhost%3A5000%2Fhello-world HTTP/1.1" 200 None
  Pulling from hello-world
  58dee6a49ef1: Pull complete
  Digest: sha256:f805bf1f635317fe194d3fa74b2b05d5b9f2d8513ec411a88128503f341e95be
  Status: Downloaded newer image for localhost:5000/hello-world:latest
2026-05-28 18:49:59,301 - urllib3.connectionpool - DEBUG - https://127.0.0.1:22376 "GET /v1.44/images/localhost:5000/hello-world:latest/json HTTP/1.1" 200 1602
2026-05-28 18:49:59,301 - torizon.tcbuilder.backend.bundle - INFO - Saving Docker Compose file
2026-05-28 18:49:59,303 - torizon.tcbuilder.backend.bundle - INFO - Exporting storage
2026-05-28 18:49:59,303 - torizon.tcbuilder.backend.bundle - INFO - Storing container bundle into "bundle"
2026-05-28 18:49:59,303 - torizon.tcbuilder.backend.bundle - DEBUG - Volume mapping for tar container: [{'Target': '/mnt', 'Source': '/home/jeremiascordoba/builder-test', 'Type': 'bind', 'ReadOnly': False}, {'Target': '/var/lib/docker/', 'Source': 'dind-volume', 'Type': 'volume', 'ReadOnly': True}]
2026-05-28 18:49:59,304 - torizon.tcbuilder.backend.bundle - DEBUG - tar command: ['tar', '--numeric-owner', '--preserve-permissions', '--directory=/var/lib/docker', "--xattrs-include='*'", '--create', '--file', '/mnt/bundle/docker-storage.tar', 'overlay2/', 'image/']
2026-05-28 18:49:59,369 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/create?name=tcb-build-tar HTTP/1.1" 201 88
2026-05-28 18:49:59,373 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/905fd5b4ddca179122fec241a8e1fe5ff3673f8eef39093981e8649786cb095d/json HTTP/1.1" 200 None
2026-05-28 18:49:59,600 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/905fd5b4ddca179122fec241a8e1fe5ff3673f8eef39093981e8649786cb095d/start HTTP/1.1" 204 0
2026-05-28 18:49:59,840 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/905fd5b4ddca179122fec241a8e1fe5ff3673f8eef39093981e8649786cb095d/wait HTTP/1.1" 200 None
2026-05-28 18:49:59,843 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/905fd5b4ddca179122fec241a8e1fe5ff3673f8eef39093981e8649786cb095d/stop HTTP/1.1" 304 0
2026-05-28 18:49:59,857 - urllib3.connectionpool - DEBUG - http://localhost:None "DELETE /v1.54/containers/905fd5b4ddca179122fec241a8e1fe5ff3673f8eef39093981e8649786cb095d?v=False&link=False&force=False HTTP/1.1" 204 0
2026-05-28 18:49:59,858 - torizon.tcbuilder.backend.bundle - DEBUG - compression_command: ['xz', '-T0', '-3', '-z', 'docker-storage.tar']
2026-05-28 18:49:59,879 - torizon.tcbuilder.backend.bundle - INFO - Stopping DIND container
2026-05-28 18:49:59,884 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed/logs?stderr=1&stdout=1&timestamps=0&follow=0&tail=all HTTP/1.1" 200 None
2026-05-28 18:49:59,889 - urllib3.connectionpool - DEBUG - http://localhost:None "GET /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed/json HTTP/1.1" 200 None
2026-05-28 18:49:59,890 - torizon.tcbuilder.backend.bundle - DEBUG - DinD container logs: Certificate request self-signature ok
DinD> subject=CN = docker:dind server
DinD> /workdir/certs_20260528184955_490683.tmp/server/cert.pem: OK
DinD> Certificate request self-signature ok
DinD> subject=CN = docker:dind client
DinD> /workdir/certs_20260528184955_490683.tmp/client/cert.pem: OK
DinD> cat: can't open '/proc/net/ip6_tables_names': No such file or directory
DinD> cat: can't open '/proc/net/arp_tables_names': No such file or directory
DinD> iptables v1.8.10 (nf_tables)
DinD> time="2026-05-28T18:49:57.519543020Z" level=info msg="Starting up"
DinD> time="2026-05-28T18:49:57.520767121Z" level=info msg="containerd not running, starting managed containerd"
DinD> time="2026-05-28T18:49:57.521968022Z" level=info msg="started new containerd process" address=/var/run/docker/containerd/containerd.sock module=libcontainerd pid=64
DinD> time="2026-05-28T18:49:57.564645560Z" level=info msg="starting containerd" revision=7c3aca7a610df76212171d200ca3811ff6096eb8 version=v1.7.13
DinD> time="2026-05-28T18:49:57.586262278Z" level=info msg="loading plugin \"io.containerd.event.v1.exchange\"..." type=io.containerd.event.v1
DinD> time="2026-05-28T18:49:57.586338079Z" level=info msg="loading plugin \"io.containerd.internal.v1.opt\"..." type=io.containerd.internal.v1
DinD> time="2026-05-28T18:49:57.586895879Z" level=info msg="loading plugin \"io.containerd.warning.v1.deprecations\"..." type=io.containerd.warning.v1
DinD> time="2026-05-28T18:49:57.586955179Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.blockfile\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.587106379Z" level=info msg="skip loading plugin \"io.containerd.snapshotter.v1.blockfile\"..." error="no scratch file generator: skip plugin" type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.587151779Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.devmapper\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.587177479Z" level=warning msg="failed to load plugin io.containerd.snapshotter.v1.devmapper" error="devmapper not configured"
DinD> time="2026-05-28T18:49:57.587194879Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.native\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.587368879Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.overlayfs\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.587808780Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.aufs\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.595403786Z" level=info msg="skip loading plugin \"io.containerd.snapshotter.v1.aufs\"..." error="aufs is not supported (modprobe aufs failed: exit status 1 \"ip: can't find device 'aufs'\\nmodprobe: can't change directory to '/lib/modules': No such file or directory\\n\"): skip plugin" type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.595467487Z" level=info msg="loading plugin \"io.containerd.snapshotter.v1.zfs\"..." type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.595665387Z" level=info msg="skip loading plugin \"io.containerd.snapshotter.v1.zfs\"..." error="path /var/lib/docker/containerd/daemon/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter: skip plugin" type=io.containerd.snapshotter.v1
DinD> time="2026-05-28T18:49:57.595692887Z" level=info msg="loading plugin \"io.containerd.content.v1.content\"..." type=io.containerd.content.v1
DinD> time="2026-05-28T18:49:57.595897887Z" level=info msg="loading plugin \"io.containerd.metadata.v1.bolt\"..." type=io.containerd.metadata.v1
DinD> time="2026-05-28T18:49:57.595979187Z" level=warning msg="could not use snapshotter devmapper in metadata plugin" error="devmapper not configured"
DinD> time="2026-05-28T18:49:57.595991887Z" level=info msg="metadata content store policy set" policy=shared
DinD> time="2026-05-28T18:49:57.610459500Z" level=info msg="loading plugin \"io.containerd.gc.v1.scheduler\"..." type=io.containerd.gc.v1
DinD> time="2026-05-28T18:49:57.610562400Z" level=info msg="loading plugin \"io.containerd.differ.v1.walking\"..." type=io.containerd.differ.v1
DinD> time="2026-05-28T18:49:57.610599600Z" level=info msg="loading plugin \"io.containerd.lease.v1.manager\"..." type=io.containerd.lease.v1
DinD> time="2026-05-28T18:49:57.610621600Z" level=info msg="loading plugin \"io.containerd.streaming.v1.manager\"..." type=io.containerd.streaming.v1
DinD> time="2026-05-28T18:49:57.610666900Z" level=info msg="loading plugin \"io.containerd.runtime.v1.linux\"..." type=io.containerd.runtime.v1
DinD> time="2026-05-28T18:49:57.610937700Z" level=info msg="loading plugin \"io.containerd.monitor.v1.cgroups\"..." type=io.containerd.monitor.v1
DinD> time="2026-05-28T18:49:57.611274800Z" level=info msg="loading plugin \"io.containerd.runtime.v2.task\"..." type=io.containerd.runtime.v2
DinD> time="2026-05-28T18:49:57.611524001Z" level=info msg="loading plugin \"io.containerd.runtime.v2.shim\"..." type=io.containerd.runtime.v2
DinD> time="2026-05-28T18:49:57.611567801Z" level=info msg="loading plugin \"io.containerd.sandbox.store.v1.local\"..." type=io.containerd.sandbox.store.v1
DinD> time="2026-05-28T18:49:57.611597101Z" level=info msg="loading plugin \"io.containerd.sandbox.controller.v1.local\"..." type=io.containerd.sandbox.controller.v1
DinD> time="2026-05-28T18:49:57.611607501Z" level=info msg="loading plugin \"io.containerd.service.v1.containers-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611618001Z" level=info msg="loading plugin \"io.containerd.service.v1.content-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611626701Z" level=info msg="loading plugin \"io.containerd.service.v1.diff-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611637001Z" level=info msg="loading plugin \"io.containerd.service.v1.images-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611656001Z" level=info msg="loading plugin \"io.containerd.service.v1.introspection-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611700401Z" level=info msg="loading plugin \"io.containerd.service.v1.namespaces-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611720401Z" level=info msg="loading plugin \"io.containerd.service.v1.snapshots-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611746101Z" level=info msg="loading plugin \"io.containerd.service.v1.tasks-service\"..." type=io.containerd.service.v1
DinD> time="2026-05-28T18:49:57.611780701Z" level=info msg="loading plugin \"io.containerd.grpc.v1.containers\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611797701Z" level=info msg="loading plugin \"io.containerd.grpc.v1.content\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611826701Z" level=info msg="loading plugin \"io.containerd.grpc.v1.diff\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611836501Z" level=info msg="loading plugin \"io.containerd.grpc.v1.events\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611846101Z" level=info msg="loading plugin \"io.containerd.grpc.v1.images\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611854801Z" level=info msg="loading plugin \"io.containerd.grpc.v1.introspection\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611862501Z" level=info msg="loading plugin \"io.containerd.grpc.v1.leases\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611870901Z" level=info msg="loading plugin \"io.containerd.grpc.v1.namespaces\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611879201Z" level=info msg="loading plugin \"io.containerd.grpc.v1.sandbox-controllers\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611889501Z" level=info msg="loading plugin \"io.containerd.grpc.v1.sandboxes\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611898001Z" level=info msg="loading plugin \"io.containerd.grpc.v1.snapshots\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611920301Z" level=info msg="loading plugin \"io.containerd.grpc.v1.streaming\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611929701Z" level=info msg="loading plugin \"io.containerd.grpc.v1.tasks\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611939901Z" level=info msg="loading plugin \"io.containerd.transfer.v1.local\"..." type=io.containerd.transfer.v1
DinD> time="2026-05-28T18:49:57.611953901Z" level=info msg="loading plugin \"io.containerd.grpc.v1.transfer\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611968401Z" level=info msg="loading plugin \"io.containerd.grpc.v1.version\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.611977401Z" level=info msg="loading plugin \"io.containerd.internal.v1.restart\"..." type=io.containerd.internal.v1
DinD> time="2026-05-28T18:49:57.612027001Z" level=info msg="loading plugin \"io.containerd.tracing.processor.v1.otlp\"..." type=io.containerd.tracing.processor.v1
DinD> time="2026-05-28T18:49:57.612055001Z" level=info msg="skip loading plugin \"io.containerd.tracing.processor.v1.otlp\"..." error="no OpenTelemetry endpoint: skip plugin" type=io.containerd.tracing.processor.v1
DinD> time="2026-05-28T18:49:57.612067801Z" level=info msg="loading plugin \"io.containerd.internal.v1.tracing\"..." type=io.containerd.internal.v1
DinD> time="2026-05-28T18:49:57.612075201Z" level=info msg="skipping tracing processor initialization (no tracing plugin)" error="no OpenTelemetry endpoint: skip plugin"
DinD> time="2026-05-28T18:49:57.612162601Z" level=info msg="loading plugin \"io.containerd.grpc.v1.healthcheck\"..." type=io.containerd.grpc.v1
DinD> time="2026-05-28T18:49:57.612184101Z" level=info msg="loading plugin \"io.containerd.nri.v1.nri\"..." type=io.containerd.nri.v1
DinD> time="2026-05-28T18:49:57.612199001Z" level=info msg="NRI interface is disabled by configuration."
DinD> time="2026-05-28T18:49:57.612555602Z" level=info msg=serving... address=/var/run/docker/containerd/containerd-debug.sock
DinD> time="2026-05-28T18:49:57.612723502Z" level=info msg=serving... address=/var/run/docker/containerd/containerd.sock.ttrpc
DinD> time="2026-05-28T18:49:57.612922702Z" level=info msg=serving... address=/var/run/docker/containerd/containerd.sock
DinD> time="2026-05-28T18:49:57.612991202Z" level=info msg="containerd successfully booted in 0.049668s"
DinD> time="2026-05-28T18:49:58.572770444Z" level=info msg="[graphdriver] trying configured driver: overlay2"
DinD> time="2026-05-28T18:49:58.593050761Z" level=info msg="Loading containers: start."
DinD> time="2026-05-28T18:49:58.921783750Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
DinD> time="2026-05-28T18:49:59.043027456Z" level=info msg="Loading containers: done."
DinD> time="2026-05-28T18:49:59.063458674Z" level=info msg="Docker daemon" commit=f417435 containerd-snapshotter=false storage-driver=overlay2 version=25.0.3
DinD> time="2026-05-28T18:49:59.063812775Z" level=info msg="Daemon has completed initialization"
DinD> time="2026-05-28T18:49:59.133726836Z" level=info msg="API listen on /var/run/docker.sock"
DinD> time="2026-05-28T18:49:59.133818036Z" level=info msg="API listen on [::]:2376"
DinD> time="2026-05-28T18:49:59.133769536Z" level=info msg="API listen on [::]:22376"
DinD> time="2026-05-28T18:49:59.189027684Z" level=warning msg="Error getting v2 registry: Get \"https://localhost:5000/v2/\": http: server gave HTTP response to HTTPS client"
DinD> time="2026-05-28T18:49:59.189114385Z" level=info msg="Attempting next endpoint for pull after error: Get \"https://localhost:5000/v2/\": http: server gave HTTP response to HTTPS client"
DinD>
2026-05-28 18:50:01,034 - urllib3.connectionpool - DEBUG - http://localhost:None "POST /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed/stop HTTP/1.1" 204 0
2026-05-28 18:50:01,053 - urllib3.connectionpool - DEBUG - http://localhost:None "DELETE /v1.54/containers/3e9ba96bb24845135ac6cbc13a84956f0af3b01506d8999c6d9413e5460395ed?v=False&link=False&force=False HTTP/1.1" 204 0
2026-05-28 18:50:02,065 - urllib3.connectionpool - DEBUG - http://localhost:None "DELETE /v1.54/volumes/dind-volume HTTP/1.1" 204 0
2026-05-28 18:50:02,067 - torizon.tcbuilder.cli.bundle - INFO - Successfully created Docker Container bundle in "bundle"!

Best Regards,
Jeremias

@EvetsMostel1 Any further questions on this topic or can we close this “ticket”?

Did you find a way forward here?

Best regards,

@Haniel.tx
Not yet, but I haven’t been working on this due to workload. I will be revisiting this in the next week or so.

Thanks,
Steve

@jeremias.tx

So here in your logs, it looks like it is trying to find a config file, which it doesn’t find, then pulls using a https command, not an insecure http command.

Am I missing something?
Steve

So I just tried the procedure again. It turns out it does work without --dind-param="--insecure-registry=localhost:5000" being set.

However, that doesn’t really help you I fear. In fact it makes the issue arguably “worse” in your case. My latest attempt shows that the registry:2 docker image is not an insecure registry at all, otherwise I would still need that argument set.

But, then that would mean you’ve been having issues connecting to what should be a secure registry. Which should be a trivial task. It also conflicts with your error logs that were complaining of an “HTTP response”.

I don’t what else to say other than it really seems to boil down to your environment. This latest test only reinforces this. You can obviously connect to the default Docker Hub registry that is clear. So that suggests your environment doesn’t have issues with secure registries in general. However, registry:2 is a registry that is running and hosted completely in your system environment.

Only your environment seems to show this behavior. Being unable to replicate this we simply can’t investigate much deeper than what we already have.

Best Regards,
Jeremias

@jeremias.tx
OK, I am confused a bit now. When you re-ran the test, does it ever try to connect with an http: request?
Right now, I would be happy to have it work in a secure way, but I can’t get that to happen either. Maybe I am using the wrong options? I just want it to work. lol
How does it connect to the registry in that case using the https: request? I see no user/password in your command.
Do you have a local certificate or a CA cert that you have attached to your local registry? If you do, that would explain why it works for you.

Thanks,
Steve

OK, I am confused a bit now. When you re-ran the test, does it ever try to connect with an http: request?

The logs look the same as the ones I posted previously. So I don’t believe so, or at least I don’t see any obvious signs of http. Also I’m pretty sure Docker does not try an http connection unless you specifically designate a registry as insecure, which as I said in my latest test I am not doing.

Maybe I am using the wrong options?

How can you be using the wrong options? I’ve copy and pasted my steps before in this thread exactly as I’ve executed them and it works fine on mine and other setups.

How does it connect to the registry in that case using the https: request? I see no user/password in your command.

HTTPS does not necessarily mean a password is needed. You can pull from Docker hub correct? Same thing, that is an HTTPS registry and does not require a password to access.

Do you have a local certificate or a CA cert that you have attached to your local registry? If you do, that would explain why it works for you.

I have showed you my exact commands, no where in my commands did I setup or configure anything outside of what I’ve stated. If the registry setup by running registry:2 has certificates configured then, it must do that itself automatically cause I did not do anything other than run it. In which case it should be the same thing for you, if you ran it exactly as I did.

At this point, either please look into your own environment, or just use any other container registry besides one that is locally hosted on your system. Like Docker Hub for example. As it’s becoming apparent that this approach of using a local registry is not working for you, and is only slowing you down.

Best Regards,
Jeremias

@jeremias.tx
Secure connections REQUIRE a certificate of some sort. Also, at least on all the machines I have seen, localhost is always treated as an insecure connection by default with docker. If you run docker info and do not have any /etc/docker/daemon.json file that specifies a specific insecure connection, you will get:
Insecure Registries:
::1/128
127.0.0.0/8
which effectively allows any insecure connection ending 127.x.x.x

Okay, how does your last reply help move this forward?

Whether the registry here is insecure or secure, the fact of the matter is that you can’t properly connect to it for whatever unknown reason. Despite my exact steps working for me and others.

There is simply not much else to say here unless it is shown that the issue here is widespread and not isolated to your development environment. It is very difficult to debug and analyze an issue that can’t be reproduced elsewhere.

Best Regards,
Jeremias

@jeremias.tx

Well, what I don’t understand is that a secure connection requires a TLS certificate. That means that when your system is connecting to the registry securely, it has a certificate that you both agree to use. I do not know what is on your system but the fact that you can connect this way and does, allows it to work on your machine with some certificate.

If you used the insecure-registries option, I was wanting to see in the logs where that occurred. What I saw was it tried to connect securely and it worked so the insecure method was never tried. Which was my original complaint that an insecure method doesn’t seem to work.

I have 2 machines that are both running Windows 11,Ubuntu 24.04 under WSL. One is running in my work environment and the other is just my personal laptop. They are both Dell machines. It doesn’t work on either one for me.

Also, the second part was that since localhost is listed as a insecure connection by default in docker, it would seem that is should never try the secure method. This is what I see in the logs that it is ALWAYS trying to connect securely first.

What does your /etc/docker folder look like?

I am sorry for being dense about this and I know this is as frustrating to you as it is me.

What am I missing?
Steve

I am also running an Ubuntu 24.04 WSL distro on Windows. I don’t have any certificates other than the ones installed by the standard ca-certificates package. I never did any advance configuration on this WSL setup.

I don’t know if the registry started by registry:2 has any particular certificates in it. As this container image is not managed or created by Toradex. But, as I said before all I’m doing is running it, whatever it does must be default configurations for it.

My /etc/docker is the default setup, that is to say it has nothing in it, so everything should be standard default settings. Nearly all of my settings on this machine are the basic default as to not cause complications or issues.

Again, I have the most vanilla setup possible and it works fine for me. I’m really not sure what else to say for your setup.

Best Regards,
Jeremias

@jeremias.tx
OK. Well that is truly odd then as to why yours works via https. Did you install docker in ubuntu using the method on the Toradex site? (sorry, just have to ask). Can you send the results of the “docker info” on your machine. Just to make sure.

However, I still maintain that the insecure-registry option doesn’t work. Since you can connect via https, it masks the fact that the insecure method does not work because it is doing the secure method first and it succeeds. Without looking at the logs, you wouldn’t know that it pulled the image via https.
Steve

I installed Docker Engine on my Ubuntu WSL using the documented method from Docker which is what our documentation points to: Install Docker Engine on Ubuntu | Docker Docs

Here’s my docker info:

Client: Docker Engine - Community
 Version:    29.3.1
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.31.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v5.1.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 2
 Server Version: 29.3.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 301b2dac98f15c27117da5c8af12118a041a31d9
 runc version: v1.3.4-0-gd6d73eb8
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.6.87.2-microsoft-standard-WSL2
 Operating System: Ubuntu 24.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.695GiB
 Name: eb840g4-coj
 ID: 2d89c2c8-f146-4fc1-b6a7-8a49f896a581
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Username: jeremiascordoba
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
  ::1/128
 Live Restore Enabled: false
 Firewall Backend: iptables

Best Regards,
Jeremias

@jeremias.tx
So, I downloaded the latest docker which installed iptables apparently to protect docker. I temporarily disabled iptables to avoid any limitation there.
The version I have is 29.6.1
I can not do a https connection. But I can push and pull the image to/from docker.
I can also use curl and read the catalog:
curl -X GET http://localhost:5000/v2/_catalog
{“repositories”:[“myname”]}
and
curl -X GET http://localhost:5000/v2/gimbals/tags/list
{“name”:“myname”,“tags”:[“mytag”]}

docker pull localhost:5000/myname:mytag
mytag: Pulling from myname
Digest: sha256:d5a18aa21f67754918f9b01d13e44240e64f605b0c1e8da14cebaf68db7967cb
Status: Image is up to date for localhost:5000/myname:mytag
localhost:5000/myname:mytag

I am getting different exceptions now trying to run bundle as it is saying I have a conflict.
Conflict (“remove dind-volume: volume is in use - [911458057f8ee68ea344b4f6574c82db1508baaedd9134dd8a725c200814ada4]”)
I assume that this is internal to builder? How do I remove that?

I have tried docker rm -f dind-volume and docker volume prune. Nothing seem to work.

Steve

Well TorizonCore Builder does create a docker volume named dind-volume. But, there shouldn’t be such a conflict unless you have something else on your machine that is also using dind-volume. Do you have multiple instances of TorizonCore Builder running at the same time? That may explain why multiple processes are conflicting on trying to use dind-volume.

Otherwise, do you just have some random container running that for some reason also needs to use dind-volume?

Either way the error is from the Docker backend complaining about a conflict on dind-volume. You need to determine what containers/processes in general are causing a conflict on dind-volume.

Best Regards,
Jeremias

@jeremias.tx

I remembered I had this issue before. The cure was run these commands:
docker rm -f tcb-fetch-dind
and then this one:
docker volume rm dind-volume.

This clears the problem. I have nothing else that uses dind.

So I have tried using curl comands that read the registry, manifest and ultimately will download the image. They all work because 5000 is the default port that can use http vs https.
But somehow in the bundle command it is still defaulting to https, and then running http which still fails, or maybe it is saying it is doing an http request but actually it is using https. I can’t really tell what it is sending because I can connect using:
curl -s http://localhost:5000/v2/myname/mytag/list
and many other curl commands including downloading archives of the container.

So there must be something wrong in what it is trying to do. Even with --verbose log-level debug, I can’t see any more specific information of what exactly the command that it is sending.

Thanks,
Steve

So there must be something wrong in what it is trying to do. Even with --verbose log-level debug, I can’t see any more specific information of what exactly the command that it is sending.

I’m not sure if it’s even necessarily this. Otherwise I, and many others would be seeing the same thing you are. We’re using the same tool and the same local registry setup. What would be vital is something that explains this difference in behavior. But, nothing stands out to me as an obvious difference.

Do you have any other developers on your team? Do any of them see the same behavior you do? Just a suggestion to maybe find some commonality in your setups/environments.

Best Regards,
Jeremias

@jeremias.tx
However, when we looked at your logs, your device was logging in using a secure (https) connection which succeeds, and never tries using an insecure connection.

Unfortunately, no, noone is using this scenario. That is why I’ve used my personal laptop that doesn’t have any corporate protection mechanisms on it. But I get the same result.
Additionally, I can run all these curl Get commands with no issues, and according to docker the 5000 port is supposed to be defaulted to http when accessing it.

curl -X GET http://localhost:5000/v2/
curl -X GET http://localhost:5000/v2/_catalog | jq
curl -X GET http://localhost:5000/v2/myimage/tags/list | jq
curl -X GET http://<registry_ip>:5000/v2/myimage/manifests/mytag | jq

I’ve even disabled iptables that comes with this version of Docker (all the entries are Docker related), and still get the exceptions. So when I see in the debug logs that it says it is running:
Internal Server Error (“Get “http://localhost:5000/v2/”: dial tcp [::1]:5000: connect: connection refused”)
I find this not believable.

Steve

Okay so I got a completely brand new laptop for some other purpose. But, I used the opportunity to do a completely fresh test for this.

Brand new laptop, with a fresh Windows 11 install. I installed an Ubuntu WSL and then, installed Docker engine in the Ubuntu WSL. I did no advanced configurations, just standard installations for everything. With this setup there is possibly no other configurations or non-standard factors that could be present to skew my results.

I followed my procedure as I did on my usual laptop, and it worked exactly the same. I’m not sure what else to say. This was the cleanest test I could possibly perform here. Everything was installed the same day with the default install configurations.

If it works out of the box on a completely brand new laptop setup. Then it should be possible to work on everyone’s setup.

If you can’t get it to work on your setup, then just use another container registry instead of one locally hosted on your laptop. There’s many hosted container registries available like Docker hub for example.

We’ve simply exhausted all possible tests and attempts to reproduce on our end.

Best Regards,
Jeremias

Hi Steve,

Reading through the whole thread, I think the residual failure has nothing to do with torizoncore-builder or the registry itself, and everything to do with IPv6 loopback inside your WSL2 setup. Two of your later logs are the giveaway:

Get "http://localhost:5000/v2/": dial tcp [::1]:5000: connect: connection refused

Note the [::1] — that’s IPv6 loopback, not 127.0.0.1. What’s happening:

  1. The TCB bundle command runs a nested DinD container. With --network=host that DinD shares your Ubuntu WSL distro’s network namespace.
  2. Inside DinD, Docker’s Go resolver looks up localhost and — on modern glibc — prefers ::1 first (per /etc/gai.conf and RFC 6724 defaults).
  3. Your registry:2 container claims [::]:5000 in docker ps, but in some WSL2 configurations that IPv6 bind isn’t actually reachable via the loopback (the v4 NAT rules are installed cleanly, the v6 ones are not — especially now that Docker 29 introduces the experimental nftables firewall backend, and iptables -F doesn’t touch the v6 table).
  4. Result: IPv6 attempt = ECONNREFUSED, and Docker doesn’t automatically fall back to IPv4 for the pull.

That’s why curl http://localhost:5000/… works for you from the WSL shell (curl happily falls back to IPv4) but the bundle command doesn’t (Docker daemon doesn’t). And it’s why Jeremias’s fresh-install laptop worked — a vanilla WSL2 install doesn’t enable IPv6, so the whole failing branch is never taken.

Quick test to confirm the diagnosis

From your Ubuntu WSL shell, with the registry running:

curl -v http://127.0.0.1:5000/v2/    # should return {}
curl -v http://[::1]:5000/v2/        # if this hangs or refuses, that's your bug
ss -tlnp | grep 5000                 # check what is actually listening on v4 vs v6

If the [::1] curl fails while the 127.0.0.1 one works, the diagnosis is confirmed.

The fix — cheapest first

Option A (in-place, no reboot): disable IPv6 loopback in your Ubuntu WSL and retry:

sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo systemctl restart docker
torizoncore-builder bundle --force \
  --dind-param="--insecure-registry=localhost:5000" \
  docker-compose.yml

If that works, you’ve proven it and can decide whether to make it permanent.

Option B (permanent, cleanest): turn IPv6 off at the WSL VM level. Create/edit %USERPROFILE%\.wslconfig on the Windows side:

[wsl2]
networkingMode=NAT
localhostForwarding=true
ipv6=false
firewall=false
autoProxy=false
dnsTunneling=false

Then from a Windows PowerShell/cmd: wsl --shutdown, wait a few seconds, start Ubuntu again. Re-run bundle.

Option C (sidestep loopback entirely): point the compose file at your WSL eth0 IP instead of localhost, and put that IP in insecure-registries. Loopback semantics stop mattering:

services:
  hello-world:
    image: 172.x.x.x:5000/hello-world:latest
torizoncore-builder bundle --force \
  --dind-param="--insecure-registry=172.x.x.x:5000" \
  docker-compose.yml

Adjust the 172.x.x.x in Option C to your actual ip addr show eth0 output.

Things worth checking on your setup regardless

  • wsl --version — mainly to see if you’re on mirrored networking mode (Win11 22H2+ with networkingMode=mirrored), which is a known source of IPv6 loopback surprises. Option B forces you back to classic NAT, which is what Jeremias’s working setup uses.
  • Whether Docker Desktop is still installed alongside your Ubuntu Docker Engine — its docker-desktop / docker-desktop-data distros leave iptables/nftables residue that survives uninstalling the GUI. wsl -l -v will show them if they’re still there.
  • After a Docker 29 upgrade, confirm sudo nft list ruleset (not just iptables -L) — v6 rules need to be either present-and-correct or absent-and-off, not a broken mix.

My bet is Option A confirms it in one shot. Let us know what the [::1] curl does — that single command basically decides the diagnosis.