Improve this doc

docker-compose.yml fields

Our compose-file support is currently based on version 2.4, as such any fields that were introduced in version 3 are not supported.

Supported fields

Field Details
build when using a path it must point to project/app subfolders. URLs to git repositories are not currently supported.
build.context must point to project/app subfolders. URLs to git repositories are not currently supported.
build.dockerfile
build.args
build.cache_from
build.extra_hosts
build.labels
build.shm_size
build.target currently incompatible with Livepush
cap_add
cap_drop
cgroup_parent
command
cpu_shares
cpu_quota
cpuset
devices
depends_on Only array form and service_started condition
dns
dns_opt
dns_search
domainname
entrypoint
environment
expose
extra_hosts
group_add
healthcheck
hostname
image
ipc
labels
mac_address
mem_limit
mem_reservation
network_mode Only support bridge, host, service:[service name], or none
networks Only support specifying network names
oom_kill_disable
oom_score_adj
pid Only support host or none
pids_limit
ports
privileged
read_only
restart Defaults to always
security_opt
shm_size
stop_grace_period
stop_signal
sysctls
tmpfs
ulimits
user
userns_mode
volumes Only support short syntax and named volumes. Bind mounts are not supported, except for as allowed by balena specific labels
working_dir

Known unsupported fields

Field Details
build.isolation
build.network
blkio_config
container_name Used by the device supervisor
cpu_count
cpu_percent
cpus Introduced by Docker Compose v2.2 and therefore not working
external_links
isolation
links
logging
memswap_limit
mem_swappiness
runtime
scale
stdin_open
tty
volume_driver
volumes_from

Known unsupported features

Feature Details
variable substitution

Labels

Note: If you have devices in your app that have a supervisor version lower than 7.22.0, then you should use the io.resin.features. form of the labels to ensure that all devices obey the label. Earlier supervisor versions will not understand the io.balena.features label.

Label Default Description Supervisor balenaOS*
io.balena.features.balena-socket false Bind mounts the balena container engine socket into the container and sets the environment variable DOCKER_HOST with the socket location for use by docker clients. v7.23.0 v2.21.0
io.balena.features.dbus false Bind mounts the host OS dbus into the container using /run/dbus:/host/run/dbus. v7.23.0 v2.21.0
io.balena.features.sysfs false Bind mounts the host OS /sys into the container. v10.8.0 v2.48.0
io.balena.features.procfs false Bind mounts the host OS /proc into the container. v10.8.0 v2.48.0
io.balena.features.kernel-modules false Bind mounts the host OS /lib/modules into the container (i.e. /lib/modules:/lib/modules). v7.23.0 v2.21.0
io.balena.features.firmware false Bind mounts the host OS /lib/firmware into the container. v7.23.0 v2.21.0
io.balena.features.journal-logs false Bind mounts journal log directories /var/log/journal and /run/log/journal as well as /etc/machine-id in read only mode. Required by some logging agents such as promtail. Journal logs can be read using libraries such as sd-journal in C or sdjournal in Go. v12.0.1 v2.61.0
io.balena.features.supervisor-api false Ensures that BALENA_SUPERVISOR_HOST, BALENA_SUPERVISOR_PORT, BALENA_SUPERVISOR_ADDRESS, and BALENA_SUPERVISOR_API_KEY are added to the container environment variables, so the supervisor API can be used. v7.23.0 v2.21.0
io.balena.features.balena-api false When enabled, it will make sure that BALENA_API_KEY is added to the container environment variables. v7.23.0 v2.21.0
io.balena.update.strategy download-then-kill Set the fleet update strategy. v7.23.0 v2.21.0
io.balena.update.handover-timeout 60000 Time, in milliseconds, before an old container is automatically killed. Only used with the hand-over update strategy. v7.23.0 v2.21.0

* balenaOS versions that ship with a compatible device supervisor version as per balenaOS Changelog.

These labels are applied to a specific service with the labels: setting:

labels:
      io.balena.features.balena-socket: '1'
      io.balena.features.kernel-modules: '1'
      io.balena.features.firmware: '1'
      io.balena.features.dbus: '1'
      io.balena.features.sysfs: '1'
      io.balena.features.procfs: '1'
      io.balena.features.journal-logs: '1'
      io.balena.features.supervisor-api: '1'
      io.balena.features.balena-api: '1'
      io.balena.update.strategy: download-then-kill
      io.balena.update.handover-timeout: ''