{"id":28995103,"url":"https://github.com/axiscommunications/docker-compose-acap","last_synced_at":"2026-05-09T19:31:39.330Z","repository":{"id":39802860,"uuid":"383509230","full_name":"AxisCommunications/docker-compose-acap","owner":"AxisCommunications","description":"ACAP application to add dockerd and docker-compose to a container capable Axis device","archived":false,"fork":false,"pushed_at":"2024-04-24T14:19:08.000Z","size":492,"stargazers_count":1,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-04-25T00:57:36.198Z","etag":null,"topics":["acap","axis","docker","docker-compose"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AxisCommunications.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-07-06T15:06:34.000Z","updated_at":"2024-04-26T10:27:45.055Z","dependencies_parsed_at":"2023-01-19T03:16:24.065Z","dependency_job_id":"6521adc2-203a-42b1-8c3a-c43a1b4600e3","html_url":"https://github.com/AxisCommunications/docker-compose-acap","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/AxisCommunications/docker-compose-acap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fdocker-compose-acap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fdocker-compose-acap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fdocker-compose-acap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fdocker-compose-acap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxisCommunications","download_url":"https://codeload.github.com/AxisCommunications/docker-compose-acap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxisCommunications%2Fdocker-compose-acap/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261801988,"owners_count":23211664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acap","axis","docker","docker-compose"],"created_at":"2025-06-25T04:06:32.320Z","updated_at":"2026-05-09T19:31:39.311Z","avatar_url":"https://github.com/AxisCommunications.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- omit in toc --\u003e\n# The Docker Compose ACAP application\n\nThe Docker Compose ACAP application, from here on called the application, provides the means to run rootless\nDocker on a compatible Axis device. In addition it bundles the Docker CLI and the Docker Compose CLI.\n\n\u003c!-- omit in toc --\u003e\n## Notable Releases\n\u003c!-- markdownlint-disable MD013 --\u003e\n| Release                  | AXIS OS min. version | Dockerd version | Type     | Comment                         |\n| -----------------------: | -------------------: | --------------: |----------|---------------------------------|\n| [3.0.0][latest-release]  | 11.10                | 26.0.0          | rootless | Latest release                  |\n| [2.0.0][2.0.0-release]   | 11.9                 | 26.0.0          | rootful  | Legacy release AXIS OS 2024 LTS |\n| [1.5.0][1.5.0-release]   | 10.12                | 26.0.0          | rootful  | Legacy release AXIS OS 2022 LTS |\n\n\u003c!-- markdownlint-enable MD013 --\u003e\n\u003e [!IMPORTANT]\n\u003e From AXIS OS 12.0, running 'rootful' ACAP applications, i.e. an application setup with the `root` user,\n\u003e will no longer be supported. To install a 'rootful' ACAP application on a device running AXIS OS\n\u003e versions between 11.5 and 11.11, allow root must be enabled. See the [VAPIX documentation][vapix-allow-root]\n\u003e for details. Alternatively, on the web page of the device:\n\u003e\n\u003e\n\u003e 1. Go to the Apps page, toggle on `Allow root-privileged apps`.\n\u003e 2. Go to System → Account page, under SSH accounts, toggle off `Restrict root access` to be able to\n\u003e send the TLS certificates. Make sure to set the password of the `root` SSH user.\n\n\u003c!-- omit in toc --\u003e\n## Table of contents\n\n- [Overview](#overview)\n- [Requirements](#requirements)\n- [Substitutions](#substitutions)\n- [Installation and Usage](#installation-and-usage)\n  - [Download a pre-built EAP file](#download-a-pre-built-eap-file)\n  - [Installation](#installation)\n  - [Settings](#settings)\n  - [Using TLS to secure the application](#using-tls-to-secure-the-application)\n  - [Using an SD card as storage](#using-an-sd-card-as-storage)\n  - [Using the application](#using-the-application)\n- [Building the application](#building-the-application)\n  - [Build options](#build-options)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Overview\n\n\u003e [!NOTE]\n\u003e\n\u003e When TCP socket is selected, the application can be run with TLS authentication or without.\n\u003e Be aware that running without TLS authentication is extremely insecure and we\n\u003e strongly recommend against this.\n\u003e See [Using TLS to secure the application](#using-tls-to-secure-the-application)\n\u003e for information on how to generate certificates for TLS authentication.\n\nThe application provides the means to run a Docker daemon on an Axis device, thereby\nmaking it possible to deploy and run Docker containers on it. When started, the daemon\nwill run in rootless mode, i.e. the user owning the daemon process will not be root,\nand by extension, the containers will not have root access to the host system.\nSee [Rootless Mode][docker-rootless-mode] on Docker.com for more information. That page also\ncontains known limitations when running rootless Docker.\n\n\u003c!-- omit in toc --\u003e\n### Known Issues\n\n- When using the SD card for this application, the file permissions can sometimes be set incorrectly\n  during an upgrade of the device firmware or the application.\n  See [Using an SD card as storage](#using-an-sd-card-as-storage) for information on how to handle this.\n\n- Only uid and gid are properly mapped between device and containers, not the secondary groups that the\nuser is a member of. This means that resources on the device, even if they are volume or device mounted,\ncan be inaccessible inside the container. This can also affect usage of unsupported D-Bus methods from\nthe container. See [Using host user secondary groups in container](#using-host-user-secondary-groups-in-container)\nfor information on how to handle this.\n\n## Requirements\n\nThe following requirements need to be met for running the application built from the\nmain branch.\n\n- Axis device:\n  - AXIS OS version 11.10 or higher.\n  - The device needs to have ACAP Native SDK support. See [Axis devices \u0026 compatibility][devices]\n  for more information.\n  - The device must be [container capable](#container-capability).\n- Computer:\n  - Either [Docker Desktop][dockerDesktop] version 4.11.1 or higher, or\n  [Docker Engine][dockerEngine] version 20.10.17 or higher.\n  - To build the application locally it is required to have [Buildx][buildx] installed.\n\n\u003c!-- omit in toc --\u003e\n### Container capability\n\nA list of container capable Axis devices can be found with the Axis Product\nSelector.\n\nFrom AXIS OS 12.0, only products with architecture `aarch64` that\nexisted before this release are supported. This\n[query][product-selector-container] lists products that cover both.\n\nIn AXIS OS 11.11, both architectures `aarch64` and `armv7hf` are supported and\nare found with this [query][product-selector-container-11-11].\n\n## Substitutions\n\nThe following substitutions will be used in this documentation:\n\n|                      | Meaning                                                |\n|----------------------| :------------------------------------------------------|\n| `\u003capplication-name\u003e` | `dockerdwrapperwithcompose`                            |\n| `\u003cARCH\u003e`             | Device architecture, either `armv7hf`or `aarch64`      |\n| `\u003cdevice-ip\u003e`        | The IP address of the device                           |\n| `\u003cuser\u003e`             | The name of a user on the device with admin rights     |\n| `\u003cpassword\u003e`         | The password of a user on the device with admin rights |\n\n## Installation and Usage\n\n### Download a pre-built EAP file\n\nDownload the EAP file for the architecture of your device from [Releases][latest-release].\nFrom the command line this can be done with:\n\n```sh\ncurl -s https://api.github.com/repos/AxisCommunications/docker-compose-acap/releases/latest \\\n | \"browser_download_url.*Docker_Daemon_with_Compose_.*_\u003cARCH\u003e\\_signed.eap\"\n```\n\nThe prebuilt application is signed. Read more about signing in the\n[Signing Documentation][signing-documentation].\n\n### Installation\n\n\u003e [!NOTE]\n\u003e **Migrating from rootful application**\n\u003e\n\u003e If you are upgrading from a rootful version of this application, i.e, any version before 3.0,\n\u003e the following is recommended:\n\u003e\n\u003e- Copy any Docker images that you want to persist from the device to your computer.\n\u003e- Stop the application.\n\u003e- Uninstall the application.\n\u003e- Format the SD card if you will use it with the application. Make sure to manually\n\u003e back up any data you wish to keep first.\n\u003e- Restart the device.\n\u003e- Install the rootless application.\n\nInstallation can be done by using either the [device web ui](#installation-via-the-device-web-ui) or\nthe [VAPIX application API][vapix-install].\n\n#### Installation via the device web ui\n\nNavigate to `\u003cdevice-ip\u003e/camera/index.html#/apps`, enable `Allow unsigned apps` toggle\nthen click on the `+Add app` button on the page.\nIn the popup window that appears, select the EAP file to install.\n\n### Settings\n\nSettings can be accessed either in the device web ui, or via [VAPIX][vapix], eg. using curl:\n\n```sh\n# To read \"\u003csetting-name\u003e\"\ncurl -s anyauth -u \"\u003cuser\u003e:\u003cpassword\u003e\" \\\n\"http://\u003cdevice-ip\u003e/axis-cgi/param.cgi?action=list\u0026group=root.\u003capplication-name\u003e.\u003csetting-name\u003e\"\n\n# To update \"\u003csetting-name\u003e\" to \"\u003cnew-value\u003e\"\ncurl -s anyauth -u \"\u003cuser\u003e:\u003cpassword\u003e\" \\\n\"http://\u003cdevice-ip\u003e/axis-cgi/param.cgi?action=update\u0026root.\u003capplication-name\u003e.\u003csetting-name\u003e=\u003cnew-value\u003e\"\n```\n\nNote that changing the settings while the application is running will lead to dockerd being restarted.\n\nThe following settings are available\n\n| Setting                              | Type    | Action | Possible values                       |\n| :----------------------------------- | :------ | :----: |---------------------------------------|\n| [SDCardSupport](#sd-card-support)    | Boolean | RW     | `yes`,`no`                            |\n| [UseTLS](#use-tls)                   | Boolean | RW     | `yes`,`no`                            |\n| [TCPSocket](#tcp-socket--ipc-socket) | Boolean | RW     | `yes`,`no`                            |\n| [IPCSocket](#tcp-socket--ipc-socket) | Boolean | RW     | `yes`,`no`                            |\n| [ApplicationLogLevel](#log-levels)   | Enum    | RW     | `debug`,`info`                        |\n| [DockerdLogLevel](#log-levels)       | Enum    | RW     | `debug`,`info`,`warn`,`error`,`fatal` |\n| [Status](#status-codes)              | String  | R      | See [Status Codes](#status-codes)     |\n\n#### SD card support\n\nSelects if the docker daemon data-root should be on the internal storage of the device (default) or on\nan SD card. See [Using an SD card as storage](#using-an-sd-card-as-storage) for further information.\n\n#### TCP Socket / IPC Socket\n\nTo be able to connect remotely to the docker daemon on the device, `TCP Socket` needs to be selected.\n`IPC Socket` needs to be selected for containers running on the device to be able to communicate with\neach other. At least one of the sockets needs to be selected for the application to start dockerd.\n\n#### Use TLS\n\nToggle to select if TLS should be disabled when using `TCP Socket`. See\n[Using TLS to secure the application](#using-tls-to-secure-the-application) for further information.\n\n#### Log levels\n\nLog levels are set separately for the application and for dockerd. For rootlesskit the log level is\nset to `debug` if `DockerdLogLevel` is set to `debug`.\n\n#### Status codes\n\nThe application use a parameter called `Status` to inform about what state it is currently in.\n\nFollowing are the possible values of `Status`:\n\n**-1 NOT STARTED** - The application is not started.\n\n**0 RUNNING** - The application is started and dockerd is running.\n\n**1 DOCKERD STOPPED** - Dockerd was stopped successfully and will soon be restarted.\n\n**2 DOCKERD RUNTIME ERROR** - Dockerd has reported an error during runtime that needs to be resolved\n                              by the operator.\n                              Change at least one parameter or restart the application in order to start\n                              dockerd again.\n\n**3 TLS CERT MISSING** - `UseTLS` is selected but there but certificates are missing on the device.\n                         The application is running but dockerd is stopped.\n                         Upload certificates and restart the application or de-select `UseTLS`.\n\n**4 NO SOCKET** - Neither `TCPSocket` or `IPCSocket` are selected.\n                  The application is running but dockerd is stopped.\n                  Select one or both sockets.\n\n**5 NO SD CARD** - `SDCardSupport` is selected but no SD card is mounted in the device.\n                   The application is running but dockerd is stopped.\n                   Insert and mount an SD card.\n\n**6 SD CARD WRONG FS** - `SDCardSupport` is selected but the mounted SD card has the wrong file system.\n                         The application is running but dockerd is stopped.\n                         Format the SD card with the correct file system.\n\n**7 SD CARD WRONG PERMISSION** - `SDCardSupport` is selected but the application user does not have the\n                                 correct file permissions to use it.\n                                 The application is running but dockerd is stopped.\n                                 Make sure no directories with the wrong user permissions are left on\n                                 the SD card, then restart the application. For further information see\n                                 [Using an SD card as storage](#using-an-sd-card-as-storage).\n\n### Using TLS to secure the application\n\nWhen using the application with TCP socket, the application can be run in either TLS or\nunsecured mode. The default selection is to use TLS mode.\n\n#### TLS Setup\n\nTLS requires the following keys and certificates on the device:\n\n- Certificate Authority certificate `ca.pem`\n- Server certificate `server-cert.pem`\n- Private server key `server-key.pem`\n\nFor more information on how to generate these files, please consult the official\n[Docker documentation][docker_protect-access].\n\nThe files can be uploaded to the device using HTTP. The request will be rejected if the file\nbeing uploaded has the incorrect header or footer for that file type. The dockerd service will\nrestart, or try to start, after each successful HTTP POST request.\nUploading a new certificate will replace an already present file.\n\n```sh\ncurl --anyauth -u \"\u003cuser\u003e:\u003cpassword\u003e\" -F file=@\u003cfile_name\u003e -X POST \\\n  http://\u003cdevice-ip\u003e/local/\u003capplication-name\u003e/\u003cfile-name\u003e\n```\n\nTo delete any of the certificates from the device HTTP DELETE can be used. Note\nthat this will *not* restart dockerd.\n\n```sh\ncurl --anyauth -u \"\u003cuser\u003e:\u003cpassword\u003e\" -X DELETE \\\n  http://\u003cdevice-ip\u003e/local/\u003capplication-name\u003e/\u003cfile-name\u003e\n```\n\nAn alternative way to upload the certificates using `scp`. This method requires an\nan SSH user with write permissions to `/usr/local/packages/\u003capplication-name\u003e/localdata`.\nIn this case the application needs to be restarted for these certificates to be used.\n\n```sh\nscp ca.pem server-cert.pem server-key.pem \u003cuser\u003e@\u003cdevice-ip\u003e:/usr/local/packages/\u003capplication-name\u003e/localdata/\n```\n\n##### Client key and certificate\n\nWhen configured for TLS, the Docker daemon will listen to port 2376.\nA client will need to have its own private key, together with a certificate authorized by the CA.\n\n```sh\ndocker --tlsverify \\\n       --tlscacert=ca.pem \\\n       --tlscert=client-cert.pem \\\n       --tlskey=client-key.pem \\\n       --host tcp://\u003cdevice-ip\u003e:2376 \\\n       version\n```\n\nInstead of specifying the files with each Docker command,\nDocker can be configured to use the keys and certificates from a directory of your choice\nby using the `DOCKER_CERT_PATH` environment variable:\n\n```sh\nexport DOCKER_CERT_PATH=\u003cclient-certificate-directory\u003e\ndocker --tlsverify \\\n       --host tcp://\u003cdevice-ip\u003e:2376 version\n```\n\nwhere `\u003cclient-certificate-directory\u003e` is the directory on your computer where the files `ca.pem`,\n`client-cert.pem` and `client-key.pem` are stored.\n\n##### Usage example without TLS\n\nWith `TCP Socket` active and `Use TLS` inactive, the Docker daemon will instead listen to port 2375.\n\n```sh\ndocker --host tcp://\u003cdevice-ip\u003e:2375 version\n```\n\n### Using an SD card as storage\n\nAn SD card might be necessary to run the application correctly. Docker\ncontainers and docker images can be quite large, and putting them on an SD card\ngives more freedom in how many and how large images that can be stored.\n\nNote that dockerd requires that Unix permissions are supported by the\nfile system. Examples of file systems which support this are ext4, ext3 and xfs.\nIt might be necessary to reformat the SD card to one of these file systems, for\nexample if the original file system of the SD card is vfat.\n\nMake sure to use an SD card that has enough capacity to hold your applications.\nOther properties of the SD card, like the speed, might also affect the performance of your\napplications. For example, the Computer Vision SDK example\n[object-detector-python][object-detector-python]\nhas a significantly higher inference time when using a small and slow SD card.\nTo get more informed about specifications, check the\n[SD Card Standards][sd-card-standards].\n\n\u003e [!CAUTION]\n\u003e\n\u003eIf this application with version before 3.0 has been used on the device with SD card as storage,\n\u003ethe storage directory might already be created with root permissions.\n\u003eSince version 3.0 the application is run in rootless mode and it will then not be able\n\u003eto access that directory. To solve this, either reformat the SD card or manually\n\u003eremove the directory that is used by the application.\n\u003eFor versions before 2.0 the path was `/var/spool/storage/SD_DISK/dockerd`.\n\u003eFor versions from 2.0 the path is `/var/spool/storage/areas/SD_DISK/\u003capplication-name\u003e`.\n\u003eAlternatively, this can be achieved by [allowing root-privileged apps][vapix-allow-root],\n\u003ereinstalling the application, then disallowing root-privileged apps again,\n\u003esince the post-install script will attempt to repair the permissions when running as root.\n\n### Using the application\n\n#### Using the application on an Axis device\n\nThe application bundles the docker and docker compose clis so that these can be used directly on\nthe device to interact with the Docker daemon. For this, the `IPCSocket` need to be selected.\nThe user of the clis should either be the application user itself or be a member of the `addon` group.\nIf a second ACAP application is used to interact with the clis, this means that that application\nshould be setup with a dynamic user.\nThe [Container example][acap-native-container-example] how a second ACAP application\ncan utilize the clis in this way.\n\n#### Using the application remotely\n\nTo interact with the Docker daemon from a remote machine the `TCPSocket` need to be\nselected and the `--host` option need to be used when running any docker command.\n\nThe port used will change depending on if the application runs using TLS or not.\nThe Docker daemon will be reachable on port 2375 when running unsecured, and on\nport 2376 when running secured using TLS. Please read section\n[Using TLS to secure the application](#using-tls-to-secure-the-application) for\nmore information.\n\n#### Run a container\n\nMake sure the application, using TLS, is running, then pull and run the\n[hello-world][docker-hello-world] image from Docker Hub:\n\n```sh\n$ docker --tlsverify --host tcp://\u003cdevice-ip\u003e:2376 pull hello-world\nUsing default tag: latest\nlatest: Pulling from library/hello-world\n70f5ac315c5a: Pull complete\nDigest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d\nStatus: Downloaded newer image for hello-world:latest\ndocker.io/library/hello-world:latest\n$ docker --tlsverify --host tcp://\u003cdevice-ip\u003e:2376 run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n 1. The Docker client contacted the Docker daemon.\n 2. The Docker daemon pulled the \"hello-world\" image from the Docker Hub.\n    (arm64v8)\n 3. The Docker daemon created a new container from that image which runs the\n    executable that produces the output you are currently reading.\n 4. The Docker daemon streamed that output to the Docker client, which sent it\n    to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n $ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\n https://hub.docker.com/\n\nFor more examples and ideas, visit:\n https://docs.docker.com/get-started/\n\n```\n\n#### Proxy Setup\n\nIf the device is located behind a proxy the Docker daemon needs to be configured.\nThis is done by configuring proxy behavior for dockerd in the daemon.json file as described in\n['Configure the Docker daemon to use a proxy server'][docker-proxy].\n\nThe daemon.json file should be located at `/usr/local/packages/dockerdwrapperwithcompose/localdata/daemon.json`\non the device and should include the following properties:\n\n```json\n{\n  \"proxies\": {\n    \"http-proxy\": \"http://proxy.example.com:3128\",\n    \"https-proxy\": \"https://proxy.example.com:3129\",\n    \"no-proxy\": \"*.test.example.com,.example.org,127.0.0.0/8\"\n  }\n}\n```\n\nSetting the contents of the daemon.json file can be done either by adding it to the source code and\nrebuilding the application or by logging into the device over SSH with an already installed\napplication and updating the file.\nIn the latter case [Developer Mode][developermode] is needed, see that documentation for further details.\nAlso note that, if the application is running when the file is updated, it needs to be restarted for\nthe change to take effect.\n\n#### Loading images onto a device\n\nIf you have images in a local repository that you want to transfer to a device, or\nif you have problems getting the `pull` command to work in your environment, `save`\nand `load` can be used.\n\n```sh\ndocker save \u003cimage-in-client-local-repository\u003e | docker --tlsverify --host tcp://\u003cdevice-ip\u003e:2376 load\n```\n\n#### Using host user secondary groups in container\n\nThe application is run by a non-root user on the device. This user is set\nup to be a member in a number of secondary groups as listed in the /app/manifest.json\nfile.\n\nWhen running a container, a user called `root`, (uid 0), belonging to group `root`, (gid 0),\nwill be the default user inside the container. It will be mapped to the non-root user on\nthe device, and the group will be mapped to the non-root user's primary group.\nIn order to get access inside the container to resources on the device that are group owned by any\nof the non-root users secondary groups, these need to be added for the container user.\nThis can be done by using `group_add` in a docker-compose.yaml or `--group-add` if using the Docker cli.\nUnfortunately, adding the name of a secondary group is not supported. Instead the *mapped* id\nof the group need to be used. The current mappings are:\n\n| device group | container group id |\n| ------------ | :----------------: |\n| `sdk`        | \"1\"                |\n| `storage`    | \"2\"                |\n\nNote that the names of the groups will *not* be correctly displayed inside the container.\n\n## Building the application\n\nDocker can be used to build the application and output the EAP file:\n\n```sh\ndocker buildx build --file Dockerfile --build-arg ARCH=\u003cARCH\u003e --output \u003cbuild-folder\u003e .\n```\n\nwhere `\u003cbuild-folder\u003e` is the path to an output folder on your machine, eg. `build`. This will be\ncreated for you if not already existing. Once the build has completed the EAP file can be found\nin the `\u003cbuild-folder\u003e`.\n\n### Build options\n\nIn order to build with debug symbols and sanitizing instrumentation for detecting memory leaks and undefined behavior,\nadd the option\n\n```sh\n--build-arg BUILD_WITH_SANITIZERS=1\n```\n\nto the docker command line above.\n\n## Contributing\n\nTake a look at the [CONTRIBUTING.md](CONTRIBUTING.md) file.\n\n## License\n\n[Apache 2.0](LICENSE)\n\n\u003c!-- Links to external references --\u003e\n\u003c!-- markdownlint-disable MD034 --\u003e\n[1.5.0-release]: https://github.com/AxisCommunications/docker-compose-acap/releases/tag/1.5.0\n[2.0.0-release]: https://github.com/AxisCommunications/docker-compose-acap/releases/tag/2.0.0\n[acap-native-container-example]: https://github.com/AxisCommunications/acap-native-sdk-examples/tree/main/container-example\n[buildx]: https://docs.docker.com/build/install-buildx/\n[devices]: https://axiscommunications.github.io/acap-documentation/docs/axis-devices-and-compatibility#sdk-and-device-compatibility\n[developermode]: http://axiscommunications.github.io/acap-documentation/docs/get-started/set-up-developer-environment/set-up-device-advanced.html#developer-mode\n[dockerDesktop]: https://docs.docker.com/desktop/\n[docker_protect-access]: https://docs.docker.com/engine/security/protect-access/\n[dockerEngine]: https://docs.docker.com/engine/\n[docker-hello-world]: https://hub.docker.com/_/hello-world\n[docker-rootless-mode]: https://docs.docker.com/engine/security/rootless/\n[docker-proxy]: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy\n[latest-release]: https://github.com/AxisCommunications/docker-compose-acap/releases/latest\n[object-detector-python]: https://github.com/AxisCommunications/acap-computer-vision-sdk-examples/tree/main/object-detector-python\n[product-selector-container-11-11]: https://www.axis.com/support/tools/product-selector/shared/%5B%7B%22index%22%3A%5B10%2C2%5D%2C%22value%22%3A%22Yes%22%7D%5D\n[product-selector-container]: https://www.axis.com/support/tools/product-selector/shared/%5B%7B%22index%22%3A%5B10%2C0%5D%2C%22value%22%3A%22ARTPEC-8%22%7D%2C%7B%22index%22%3A%5B10%2C2%5D%2C%22value%22%3A%22Yes%22%7D%5D\n[sd-card-standards]: https://www.sdcard.org/developers/sd-standard-overview/\n[signing-documentation]: https://axiscommunications.github.io/acap-documentation/docs/faq/security.html#sign-acap-applications\n[vapix]: https://www.axis.com/vapix-library/\n[vapix-install]: https://www.axis.com/vapix-library/subjects/t10102231/section/t10036126/display?section=t10036126-t10010609\n[vapix-allow-root]: https://www.axis.com/vapix-library/subjects/t10102231/section/t10036126/display?section=t10036126-t10185050\n\u003c!-- markdownlint-enable MD034 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Fdocker-compose-acap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxiscommunications%2Fdocker-compose-acap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxiscommunications%2Fdocker-compose-acap/lists"}