Mender Update installation

I am installing mender on my machine for OTA updates and app deployments.

Installing mender using

curl -fLsS https://get.mender.io -o get-mender.sh
# Added mender update component to instal list
sudo bash get-mender.sh

This did not work giving some version mismatch error

Then I installed mender-clinet4 which had the mender-update component,

mender-update --version
5.0.3

but it did not have the docker compose module as mentioned here. Tutorial: Docker Compose update | Mender documentation

I installed all these components on my machine and I got some error regarding missing files in modules.

2025-11-05 13:27:46.984 +0000 UTC info: Running Mender client 5.0.3
2025-11-05 13:27:46.984 +0000 UTC info: Deployment with ID 06ff1ec7-1a36-47df-898f-fa18944987ea started.
2025-11-05 13:27:46.985 +0000 UTC info: Sending status update to server
2025-11-05 13:27:47.47 +0000 UTC info: Installing artifact...
2025-11-05 13:27:47.487 +0000 UTC error: Update Module not found for given artifact type: ProvidePayloadFileSizes: Cannot launch /usr/share/mender/modules/v3/docker-compose
2025-11-05 13:27:47.487 +0000 UTC error: Operation canceled: GET https://c271964d41749feb10da762816c952ee.r2.cloudflarestorage.com/mender-artifact-storage-prod-hm-eu/68e7a4b6c3561b4d9787dfde/bdb6aeed-c1a8-4a67-96cd-187555340519?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=19a52e042b2d44cda3cce7623fc49194%2F20251105%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251105T132746Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3D%22nginx-v1.0.mender%22&response-content-type=application%2Fvnd.mender-artifact&x-id=GetObject&X-Amz-Signature=f8693457496da67bd05dcd97d0106710e2bb664a114b099b06f97af7218906cf: HTTP request cancelled
2025-11-05 13:27:47.49 +0000 UTC error: Update Module not found for given artifact type: Cleanup: Cannot launch /usr/share/mender/modules/v3/docker-compose
2025-11-05 13:27:47.49 +0000 UTC info: Sending status update to server

I copied usr/share/mender/app-modules/v1/docker-compose to usr/share/mender/modules/v3/docker-compose

Now i get the following error

2025-11-05 14:43:46.076 +0000 UTC info: Running Mender client 5.0.3
2025-11-05 14:43:46.076 +0000 UTC info: Deployment with ID ff947dc1-ab34-42c6-8b9f-90680dc88a7e started.
2025-11-05 14:43:46.077 +0000 UTC info: Sending status update to server
2025-11-05 14:43:46.424 +0000 UTC info: Installing artifact...
2025-11-05 14:43:46.447 +0000 UTC error: Process returned non-zero exit status: ProvidePayloadFileSizes: Process exited with status 1
2025-11-05 14:43:46.448 +0000 UTC error: Operation canceled: GET https://c271964d41749feb10da762816c952ee.r2.cloudflarestorage.com/mender-artifact-storage-prod-hm-eu/68e7a4b6c3561b4d9787dfde/bdb6aeed-c1a8-4a67-96cd-187555340519?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=19a52e042b2d44cda3cce7623fc49194%2F20251105%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251105T144346Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3D%22nginx-v1.0.mender%22&response-content-type=application%2Fvnd.mender-artifact&x-id=GetObject&X-Amz-Signature=a77bebfa7bf180b975fbd1da4b6e1d180df02e31da6caa56242243b69352436d: HTTP request cancelled
2025-11-05 14:43:46.454 +0000 UTC info: Update Module output (stdout): ERROR: unknown API call: Cleanup /var/lib/mender/modules/v3/payloads/0000/tree
2025-11-05 14:43:46.456 +0000 UTC error: Process returned non-zero exit status: Cleanup: Process exited with status 1
2025-11-05 14:43:46.456 +0000 UTC info: Sending status update to server

I tried creating the artifact as both app and docker-compose.

mender-artifact write module-image   -T app   -n ${ARTIFACT_NAME}   -t ${DEVICE_TYPE}   -o ${OUTPUT_PATH}   -f docker-compose.yml
mender-artifact write module-image   -T docker-compose   -n ${ARTIFACT_NAME}   -t ${DEVICE_TYPE}   -o ${OUTPUT_PATH}   -f docker-compose.yml

Is there a documentation on how to get the whole pipeline working?

Installation Guide used

Im trying to use the docker artifact gen I m not sure if this is the latest method of doing this. As per the tutorial it uses a differnet component.

I am trting to run docker containers in my remote machine and i unable to create artifacts

vini@vini-ThinkPad-T490s:~/artifacts$ DOCKER_IMAGES="nginx:latest curlimages/curl:latest"
vini@vini-ThinkPad-T490s:~/artifacts$ ./docker-artifact-gen -n ${ARTIFACT_NAME} -t ${DEVICE_TYPE} -o ${OUTPUT_PATH} ${DOCKER_IMAGES}
latest: Pulling from library/nginx
Digest: sha256:1beed3ca46acebe9d3fb62e9067f03d05d5bfa97a00f30938a0a3580563272ad
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
template parsing error: template: :1:2: executing "" at <index .RepoDigests 0>: error calling index: reflect: slice index out of range
vini@vini-ThinkPad-T490s:~/artifacts$ 

When i try the method from the tutorial i get this error

vini@vini-ThinkPad-T490s:~/artifacts$ app-gen --artifact-name nginx \
        --device-type jetson \
        --application-name nginx \
        --platform "$PLATFORM" \
        --orchestrator docker-compose \
        --manifests-dir . \
        --output-path nginx-app.mender \
        -- \
        --software-name="nginx-software" \
        --software-version="software-version"
No specific images specified. Will try to extract from docker-compose.yaml file.
latest: Pulling from library/nginx
Digest: sha256:1beed3ca46acebe9d3fb62e9067f03d05d5bfa97a00f30938a0a3580563272ad
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
latest: Pulling from library/nginx
Digest: sha256:1beed3ca46acebe9d3fb62e9067f03d05d5bfa97a00f30938a0a3580563272ad
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
declare -a images_shas=([0]="2d05a13eb7a31ad3d73ae48fce313eaa05b7c5a582eafb9c288b0f8c68e93073" [1]="2d05a13eb7a31ad3d73ae48fce313eaa05b7c5a582eafb9c288b0f8c68e93073")
failed to save image: invalid output path: directory "/tmp/tmp.6tjKfbH4IH/images/2d05a13eb7a31ad3d73ae48fce313eaa05b7c5a582eafb9c288b0f8c68e93073" does not exist

What am i missing from the documentation to get it working?
For instance single file generation works fine.

vini@vini-ThinkPad-T490s:~/artifacts$ ./single-file-artifact-gen   --device-type jetson   -o test.mender   -n test-file-jetson   --dest-dir /data   test
Artifact test.mender generated successfully:
Reading Artifact...
.............................................................. - 100 %
Mender artifact:
  Name: test-file-jetson
  Format: mender
  Version: 3
  Signature: no signature
  Compatible devices: '[jetson]'
  Provides group: 
  Depends on one of artifact(s): []
  Depends on one of group(s): []
  State scripts:

Updates:
    0:
    Type:   single-file
    Provides:
	rootfs-image.single-file.version: test-file-jetson
    Depends: Nothing
    Clears Provides: ["rootfs-image.single-file.*"]
    Metadata: Nothing
    Files:
      name:     dest_dir
      size:     6
      modified: 2025-11-07 12:42:08 +0100 CET
      checksum: 263aca83a3ff2cd846024109381a9112b546729acbcc38b9c2296fd512aea02c
      name:     filename
      size:     5
      modified: 2025-11-07 12:42:08 +0100 CET
      checksum: f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
      name:     permissions
      size:     4
      modified: 2025-11-07 12:42:08 +0100 CET
      checksum: af5a86efbcdf0dc2cdba643a99528c6ab92cfc7ead17d655b3f63b841d74efb7
      name:     test
      size:     16
      modified: 2025-11-07 12:36:33 +0100 CET
      checksum: ed2814f4f0ee1f2f3f1277bbe43294067ffee735a3408d233bd40690c4be1aa1

Versions

mender-artifact version 3.6.0+ds1-2ubuntu0.1
Device
mender-update --version
5.0.3

I want to add dockercompose to my remote machine to run containers

thank you

Hi @vini,

I tried to reproduce your problem, but failed. Once for docker:

tyj@tyj-mmc:~/builds/docker-compose$ DOCKER_IMAGES="nginx:latest curlimages/curl:latest"
tyj@tyj-mmc:~/builds/docker-compose$ docker-artifact-gen -n ${ARTIFACT_NAME} -t ${DEVICE_TYPE} -o ${OUTPUT_PATH} ${DOCKER_IMAGES}
latest: Pulling from curlimages/curl
2d35ebdb57d9: Already exists
f2f82549a04b: Pull complete
bd9ddc54bea9: Pull complete
Digest: sha256:935d9100e9ba842cdb060de42472c7ca90cfe9a7c96e4dacb55e79e560b3ff40
Status: Downloaded newer image for curlimages/curl:latest
docker.io/curlimages/curl:latest
Writing Artifact...
Version                 _
Manifest                _
Manifest signature      _
Header                  _
Payload
Artifact nginx:latest generated successfully:
Reading Artifact...
.............................................................. - 100 %                                                                                     Mender Artifact:
  Name: myfirstcomposition
  Format: mender
  Version: 3
  Signature: no signature
  Compatible devices: [raspberrypi4]
  Provides group:
  Depends on one of artifact(s): []
  Depends on one of group(s): []
  State scripts: []

Updates:
  - Type: docker
    Provides:
      rootfs-image.docker.version: myfirstcomposition
    Depends: {}
    Clears Provides: [rootfs-image.docker.*]
    Metadata:
      {
        "containers": [
          "curlimages/curl@sha256:935d9100e9ba842cdb060de42472c7ca90cfe9a7c96e4dacb55e79e560b3ff40"
        ],
        "run_args": ""
      }
    Files: []

once for docker-compose:

tyj@tyj-mmc:~/builds/docker-compose$ app-gen --artifact-name nginx         --device-type jetson         --application-name nginx         -15:55:44 [28/475$
ORM"         --orchestrator docker-compose         --manifests-dir ./manifests/v1/         --output-path nginx-app.mender         --         --software-nam
e="nginx-software"         --software-version="software-version"
No specific images specified. Will try to extract from docker-compose.yaml file.
WARN[0000] /home/tyj/builds/docker-compose/manifests/v1/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to a
void potential confusion
v2.9: Pulling from library/traefik
Digest: sha256:8d81a9df1435f9f3d36ac9398465ef2d5d61e671059974db753faaed14b627de
Status: Image is up to date for traefik:v2.9
docker.io/library/traefik:v2.9
v2.9: Pulling from library/traefik
Digest: sha256:8d81a9df1435f9f3d36ac9398465ef2d5d61e671059974db753faaed14b627de
Status: Image is up to date for traefik:v2.9
docker.io/library/traefik:v2.9
Using default tag: latest
latest: Pulling from traefik/whoami
Digest: sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab
Status: Image is up to date for traefik/whoami:latest
docker.io/traefik/whoami:latest
Using default tag: latest
latest: Pulling from traefik/whoami
Digest: sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab
Status: Image is up to date for traefik/whoami:latest
docker.io/traefik/whoami:latest
declare -a images_shas=([0]="66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0" [1]="66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320
c07515ff0" [2]="27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43" [3]="27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43")
images/
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/image.img
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/sums-new.txt
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/sums-current.txt
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/url-current.txt
images/27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43/url-new.txt
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/image.img
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/sums-new.txt
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/sums-current.txt
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/url-current.txt
images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0/url-new.txt
manifests/
manifests/docker-compose.yaml
saving metadata:
--
{"application_name":"nginx","orchestrator":"docker-compose","platform":"linux/arm/v7","version":"1.0","images":["27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43","66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0"]}
--
Writing Artifact...
Version                 _
Manifest                _
Manifest signature      _
Header                  _
Payload
.............................................................. - 100 %
.............................................................. - 100 %
Artifact nginx-app.mender generated successfully:
Reading Artifact...
.............................................................. - 100 %
Mender Artifact:
  Name: nginx
  Format: mender
  Version: 3
  Signature: no signature
  Compatible devices: [jetson]
  Provides group:
  Depends on one of artifact(s): []
  Depends on one of group(s): []
  State scripts: []

Updates:
  - Type: app
    Provides:
      rootfs-image.nginx-software.version: software-version
    Depends: {}
    Clears Provides: [rootfs-image.nginx-software.*]
    Metadata:
      {
        "application_name": "nginx",
        "images": [
          "27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43",
          "66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0"
        ],
        "orchestrator": "docker-compose",
        "platform": "linux/arm/v7",
        "version": "1.0"
      }
    Files:
      - checksum: 55f25f4385a23c68891ebd7d3cb8a08959e4af31ab087b7465f923b9e8899746
        modified: 2025-11-07 15:54:06 +0000 UTC
        name: images.tar.gz
        size: 39078163
      - checksum: 9d2931224ef35e90786c9728a4997e60443fc3d634ac6e3a2860c9c5e01aba1a
        modified: 2025-11-07 15:54:06 +0000 UTC
        name: manifests.tar.gz
        size: 392

You don’t need the Mender Client on the workstation.
My mender-artifact version is 4.2.0.

So the obvious things are

  1. update mender-artifact as described in Download | Mender documentation
  2. inspect your manifest file for errors, maybe start with the provided one for reference and then modify

Greetz,
Josef

Hi Josef,

thanks for checking this out.

I have upgraded the mender-artifact to 4.2.0

I still have the same error with both docker compose and docker gen. I am following the tutorial link as it is.

However I was able to create the artifact using mender-artifact command and when creating a release a container was started in my device

mender-artifact write module-image   -t jetson   -n  triton-23 -T docker -o triton-23.mender -m triton-metadata.json

cat triton-metadata.json
{
  "containers": ["nvcr.io/nvidia/tritonserver:23.10-py3"],
  "run_args": "--name tritonserver-new --runtime=nvidia --gpus all -p 9000:8000 -p 9001:8001 -p 9002:8002 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -e MODEL_REPOSITORY=s3://my-bucket/models -e TRITON_AWS_MOUNT_DIRECTORY=/models --network host"
}

I m not sure how to make this part work with docker-compose though.

Hi @vini,

Okay, I think we’re getting closer here. There are two different Update Model available, which serve two different purposes.

Looking at your triton-metadata.json example, it sounds like you effectively want to deploy the nvcr.io/nvidia/tritonserver:23.10-py3 container, with --name tritonserver-new --runtime=nvidia --gpus all -p 9000:8000 -p 9001:8001 -p 9002:8002 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -e MODEL_REPOSITORY=s3://my-bucket/models -e TRITON_AWS_MOUNT_DIRECTORY=/models --network host as run_args. I don’t have a matching board available to actually test the artifact, but creating it with

ARTIFACT_NAME="my-container-update-1.0"
DEVICE_TYPE="my-device-type"
OUTPUT_PATH=my-container-update-1.0.mender
DOCKER_IMAGES="nvcr.io/nvidia/tritonserver:23.10-py3"
/docker-artifact-gen \
  -n ${ARTIFACT_NAME} \
  -t ${DEVICE_TYPE} \
  -o ${OUTPUT_PATH} \
  --run-args '--name tritonserver-new --runtime=nvidia --gpus all -p 9000:8000 -p 9001:8001 -p 9002:8002 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -e MODEL_REPOSITORY=s3://my-bucket/models -e TRITON_AWS_MOUNT_DIRECTORY=/models --network host'\
  ${DOCKER_IMAGES}

did work right away:

tyj@tyj-mmc:~/builds/dc$ ./docker-artifact-gen -n ${ARTIFACT_NAME} -t ${DEVICE_TYPE} -o ${OUTPUT_PATH} --run-args '--name tritonserver-new --runtime=nvidia --gpus all -p 9000:8000 -p 9001:8001 -p 9002:8002 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -e MODEL_REPOSITORY=s3://my-bucket/models -e TRITON_AWS_MOUNT_DIRECTORY=/models --network host' ${DOCKER_IMAGES}
23.10-py3: Pulling from nvidia/tritonserver
707e32e9fc56: Pull complete
c15d1d6b2c11: Pull complete
7e97a8ec5681: Pull complete
894330fe1bf5: Pull complete
97707dfd1d40: Pull complete
d69ae92c3e1e: Pull complete
a013d53fd443: Pull complete
18989d23e6f7: Pull complete
53638f96ad3c: Pull complete
edbefd2705db: Pull complete
4a10dab4bd4c: Pull complete
7ee32cc2089f: Pull complete
91eeea9164ed: Pull complete
8a97013af2f7: Pull complete
e7e3bed3cba2: Pull complete
28c7c853143d: Pull complete
b2b861b09905: Pull complete
1d6a93c741ac: Pull complete
f805b9a60db2: Pull complete
8f5df47fd444: Pull complete
0874059c255d: Pull complete
421eb8390334: Pull complete
b17fdbdb8751: Pull complete
Digest: sha256:83513cb05c7e53ada093cab904daa8861d5b8bc67d75dd78237731411b744da9
Status: Downloaded newer image for nvcr.io/nvidia/tritonserver:23.10-py3
nvcr.io/nvidia/tritonserver:23.10-py3
Writing Artifact...
Version                 _
Manifest                _
Manifest signature      _
Header                  _
Payload
Artifact my-container-update-1.0.mender generated successfully:
Reading Artifact...
.............................................................. - 100 %
Mender Artifact:
  Name: my-container-update-1.0
  Format: mender
  Version: 3
  Signature: no signature
  Compatible devices: [my-device-type]
  Provides group:
  Depends on one of artifact(s): []
  Depends on one of group(s): []
  State scripts: []

Updates:
  - Type: docker
    Provides:
      rootfs-image.docker.version: my-container-update-1.0
    Depends: {}
    Clears Provides: [rootfs-image.docker.*]
    Metadata:
      {
        "containers": [
          "nvcr.io/nvidia/tritonserver@sha256:83513cb05c7e53ada093cab904daa8861d5b8bc67d75dd78237731411b744da9"
        ],
        "run_args": "--name tritonserver-new --runtime=nvidia --gpus all -p 9000:8000 -p 9001:8001 -p 9002:8002 --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -e MODEL_REPOSITORY=s3://my-bucket/models -e TRITON_AWS_MOUNT_DIRECTORY=/models --network host"
      }
    Files: []

So my understanding is the the first thing is to choose the right approach for your requirements. :slight_smile:

Greetz,
Josef

hi @TheYoctoJester

The docker-artifact-gen works now. But I want to use docker compose to deploy my applications, I was testing to docker to see if something would work.

My jetson is prepared

root@jetson-1422425080576:/usr/share/mender/modules/v3# mender-update --version && \
  docker --version && \
  docker compose version && \
  jq --version && \
  tree --version && \
  xdelta3 -V
5.0.3
Docker version 28.5.2, build ecc6942
Docker Compose version v2.40.3
jq-1.6
tree v2.0.2 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro 
Xdelta version 3.0.11, Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Joshua MacDonald
Xdelta comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see "COPYING" for details.

I have installed the modules as per the documentation. I see that the docker-compose module is created under /usr/share/mender/app-modules/v1

While other tools are available under

/usr/share/mender/modules/v3# ls 
app  directory  docker  k8s  reboot  rootfs-image  rootfs-image-jetson  script  single-file

And I assume this is the reason why I cannot even get the docker compose work with the mender-artifact write-module command.

However I still have the same issue when trying to create a docker compose artifact. In the github repo i dont see docker compose in the master branch.

vini@vini-ThinkPad-T490s:~/artifacts$ BINDIR=$HOME/bin
mkdir -p $BINDIR
export PATH=$BINDIR:$PATH
wget https://raw.githubusercontent.com/mendersoftware/app-update-module/1.1.0/gen/app-gen \
        -O $BINDIR/app-gen
chmod +x $BINDIR/app-gen
--2025-11-11 16:05:08--  https://raw.githubusercontent.com/mendersoftware/app-update-module/1.1.0/gen/app-gen
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 2606:50c0:8003::154, 2606:50c0:8000::154, 2606:50c0:8001::154, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8003::154|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19457 (19K) [text/plain]
Saving to: ‘/home/vini/bin/app-gen’

/home/vini/bin/app-gen                               100%[=====================================================================================================================>]  19,00K  --.-KB/s    in 0,003s  

2025-11-11 16:05:09 (5,65 MB/s) - ‘/home/vini/bin/app-gen’ saved [19457/19457]

vini@vini-ThinkPad-T490s:~/artifacts$ mkdir -p manifests/v1
cat <<EOF > manifests/v1/docker-compose.yaml
version: "3.3"
services:
  gateway:
    image: "traefik:v2.9"
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "8080:80"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
  whoami:
    image: "traefik/whoami"
    labels:
      - "traefik.enable=true"
      - 'traefik.http.routers.whoami.rule=Path("/whoami")'
      - "traefik.http.routers.whoami.entrypoints=web"
EOF
vini@vini-ThinkPad-T490s:~/artifacts$ ARTIFACT_NAME="myfirstcomposition"
DEVICE_TYPE="raspberrypi4"
PLATFORM="linux/arm/v7"
app-gen --artifact-name "$ARTIFACT_NAME" \
        --device-type "$DEVICE_TYPE" \
        --platform "$PLATFORM" \
        --application-name "$ARTIFACT_NAME" \
        --image docker.io/library/traefik:v2.9 \
        --image docker.io/traefik/whoami:latest \
        --orchestrator docker-compose \
        --manifests-dir ./manifests/v1 \
        --output-path artifact.mender \
        -- \
        --software-name="$ARTIFACT_NAME" \
        --software-version="v1"
v2.9: Pulling from library/traefik
Digest: sha256:8d81a9df1435f9f3d36ac9398465ef2d5d61e671059974db753faaed14b627de
Status: Image is up to date for traefik:v2.9
docker.io/library/traefik:v2.9
v2.9: Pulling from library/traefik
Digest: sha256:8d81a9df1435f9f3d36ac9398465ef2d5d61e671059974db753faaed14b627de
Status: Image is up to date for traefik:v2.9
docker.io/library/traefik:v2.9
latest: Pulling from traefik/whoami
Digest: sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab
Status: Image is up to date for traefik/whoami:latest
docker.io/traefik/whoami:latest
latest: Pulling from traefik/whoami
Digest: sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab
Status: Image is up to date for traefik/whoami:latest
docker.io/traefik/whoami:latest
declare -a images_shas=([0]="66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0" [1]="66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0" [2]="27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43" [3]="27e7f42650616521d8c642b93c1cbc15d503d87ef0ff4348b0156f41bf4ffd43")
failed to save image: invalid output path: directory "/tmp/tmp.HFhMnMMQHJ/images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0" does not exist
vini@vini-ThinkPad-T490s:~/artifacts$ 

I have also tried doing the same steps as root and it had the same error as well.

Ok, so we are essentially down to this problem.

Is the machine which you are running this on special in some way? Which Linux distribution / version are you using?

Greetz,
Josef

Hey @TheYoctoJester

The machine is nothing special

vini@vini-ThinkPad-T490s:~/artifacts$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

The target machine is not relevant here i assume.