# Mender Update installation

**URL:** <https://hub.mender.io/t/mender-update-installation/8081>\
**Category:** General Discussions\
**Created:** [November 5, 2025, 3:00pm UTC](https://hub.mender.io/t/mender-update-installation/8081 "2025-11-05T15:00:46Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![vini](https://avatars.discourse-cdn.com/v4/letter/v/c77e96/32.png) [@vini](https://hub.mender.io/u/vini)\
**Post date:** [November 5, 2025, 3:00pm UTC](https://hub.mender.io/t/mender-update-installation/8081/1 "2025-11-05T15:00:46Z")

</div>

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

Installing mender using

```auto
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,

```auto
mender-update --version
5.0.3

```

but it did not have the docker compose module as mentioned here. [Tutorial: Docker Compose update | Mender documentation](https://docs.mender.io/artifact-creation/create-an-artifact/docker-compose)

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

```auto
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

```auto
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.

```auto
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

> **[Device components | Mender documentation](https://docs.mender.io/downloads/device-components#set-up-the-apt-repository)**

> **[Tutorial: Docker Compose update | Mender documentation](https://docs.mender.io/artifact-creation/create-an-artifact/docker-compose)**

---

<div class="post-metadata">

**Author:** ![vini](https://avatars.discourse-cdn.com/v4/letter/v/c77e96/32.png) [@vini](https://hub.mender.io/u/vini)\
**Post date:** [November 7, 2025, 12:13pm UTC](https://hub.mender.io/t/mender-update-installation/8081/2 "2025-11-07T12:13:38Z")

</div>

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](https://docs.mender.io/artifact-creation/create-an-artifact/docker-compose) it uses a differnet component.

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

```auto
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

```auto
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.

```auto
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

```auto
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

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [November 7, 2025, 4:04pm UTC](https://hub.mender.io/t/mender-update-installation/8081/3 "2025-11-07T16:04:28Z")

</div>

Hi @vini,

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

```auto
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`:

```auto
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](https://docs.mender.io/downloads)
2. inspect your `manifest` file for errors, maybe start with the provided one for reference and then modify

Greetz,  
Josef

---

<div class="post-metadata">

**Author:** ![vini](https://avatars.discourse-cdn.com/v4/letter/v/c77e96/32.png) [@vini](https://hub.mender.io/u/vini)\
**Post date:** [November 7, 2025, 5:08pm UTC](https://hub.mender.io/t/mender-update-installation/8081/4 "2025-11-07T17:08:20Z")

</div>

> [@TheYoctoJester](#):
>
> `tyj@tyj-mmc:~/builds/docker-compose$ docker-artifact-gen -n ${ARTIFACT_NAME} -t ${DEVICE_TYPE} -o ${OUTPUT_PATH} ${DOCKER_IMAGES}`

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

```auto
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.

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [November 11, 2025, 10:44am UTC](https://hub.mender.io/t/mender-update-installation/8081/5 "2025-11-11T10:44:03Z")

</div>

Hi @vini,

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

- the Application Update Module, as documented here: [Tutorial: Docker Compose update | Mender documentation](https://docs.mender.io/artifact-creation/create-an-artifact/docker-compose). This one allows to deploy `k8s`-style and `docker-compose`-style setups consisting of multiple containers, defined through a form of `manifest`.
- the `docker` Update Module, as provided here: [mender-update-modules/docker at master · mendersoftware/mender-update-modules · GitHub](https://github.com/mendersoftware/mender-update-modules/tree/master/docker). This allows to deploy one specific container to the target, optionally with arguments to run.

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

```auto
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:

```auto
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. 🙂

Greetz,  
Josef

---

<div class="post-metadata">

**Author:** ![vini](https://avatars.discourse-cdn.com/v4/letter/v/c77e96/32.png) [@vini](https://hub.mender.io/u/vini)\
**Post date:** [November 11, 2025, 3:19pm UTC](https://hub.mender.io/t/mender-update-installation/8081/6 "2025-11-11T15:19:31Z")

</div>

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

```auto
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

```auto
/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](https://github.com/mendersoftware/mender-update-modules/tree/master/docker) repo i dont see docker compose in the master branch.

```auto
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.

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [November 11, 2025, 4:20pm UTC](https://hub.mender.io/t/mender-update-installation/8081/7 "2025-11-11T16:20:55Z")

</div>

Ok, so we are essentially down to this problem.

> [@vini](#):
>
> ```auto
> 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"
> ...
> failed to save image: invalid output path: directory "/tmp/tmp.HFhMnMMQHJ/images/66c077549480f6828d39797ca3855e6299d0c1e7daf08d67cd62320c07515ff0" does not exist
> vini@vini-ThinkPad-T490s:~/artifacts$ 
> 
> ```

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

Greetz,  
Josef

---

<div class="post-metadata">

**Author:** ![vini](https://avatars.discourse-cdn.com/v4/letter/v/c77e96/32.png) [@vini](https://hub.mender.io/u/vini)\
**Post date:** [November 11, 2025, 7:50pm UTC](https://hub.mender.io/t/mender-update-installation/8081/8 "2025-11-11T19:50:14Z")

</div>

Hey @TheYoctoJester

The machine is nothing special

```auto
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.
