Docker acarsdec

December 17, 2025 ยท View on GitHub

Banner GitHub Workflow Status Docker Pulls Docker Image Size (tag) Discord

Docker container for running airframe's fork of acarsdec and forwarding the received JSON messages to another system or docker container. Best used alongside ACARS Hub.

Builds and runs on amd64, arm64.

Please note: DUE TO LIBSDRPLAY, ARM32 IS NOT SUPPORTED

Required hardware

A computer host on a suitable architecture and one USB RTL-SDR dongle connected to an antenna.

ACARS Hub integration

The default SERVER and SERVER_PORT values are suitable for automatically working with ACARS Hub, provided ACARS Hub is on the same pi as the decoder. If ACARS Hub is not on the same Pi, please provide the correct host name in the SERVER variable. Very likely you will not have to change the SERVER_PORT, but if you did change the port mapping on ACARS Router (and you will know if you did) please set the server port correctly as well.

Up and running

version: "2.0"

services:
  acarsdec:
    image: ghcr.io/sdr-enthusiasts/docker-acarsdec:latest
    container_name: acarsdec
    restart: always
    ports:
    environment:
      - TZ="America/Denver"
      - RTL_SERIAL=1342
      - FEED_ID=ACARS
      - FREQUENCIES=130.025 130.450 131.125 131.550
      - OUTPUT_SERVER_MODE=tcp
    tmpfs:
      - /run:exec,size=64M
      - /var/log
    device_cgroup_rules:
      - "c 189:* rwm"
    volumes:
      - /dev/bus/usb:/dev/bus/usb:ro

Configuration options

VariableDescriptionRequiredDefault
TZYour timezoneNoUTC
RTL_SERIALThe rtlsdr device serial that identifies your dongle.NoBlank
BIASTEEEnable biastee when using RTL_SERIAL (doesn't work with SOAPY).NoBlank
SOAPYSDRThe SoapySDR device string that identifies your dongle. See below for supported soapy sdr types.NoBlank
AIRSPY_SERIALThe airspy device serial that identifies your dongle (LNA recommended, really just use an rtl-sdr maybe).NoBlank
FEED_IDUsed by the decoder to insert a unique ID in to the output messageYesBlank
FREQUENCIESSemicolon-separated or space-separated list of frequencies in MHz for the decoder to listen toYesBlank
PPMParts per million correction of the decoderNo0
GAINThe gain applied to the RTL-SDR dongle. Recommended to leave at the default autogain. To set manually, gain in in db (0 to 49.6; >52 and -10 will result in AGC; default is AGC)No-10 for autogain
OUTPUT_SERVERThe server where messages will be forwarded to.Noacars_router
OUTPUT_SERVER_PORTThe port where the server will receive messages on.No5550
OUTPUT_SERVER_MODEThe output mode. udp, tcp and zmq are validNoudp
MODEThe output mode. P for planeplotter, J for JSON and A for acarsdec.NoJ
QUIET_LOGSMute log output to the bare minimum. Set to true to see less log messages.NoFALSE
ACARSDEC_COMMAND_EXTRAAdditional arguments to pass to the decoder.NoBlank

SoapySDR device string

The SoapySDR device string is used to identify your RTL-SDR dongle. The default value is driver=rtlsdr which is suitable for most users. If you are using a different SDR, you will need to provide the correct device string. For example, if you are using an Airspy Mini, you would set SOAPYSDR=driver=airspy. Pass any additional options for the SDR in via this option as well.

Supported Soapy Drivers:

  • rtlsdr
  • rtltcp
  • airspy
  • sdrplay

Output modes

TL;DR: No change to your setup is necessary for continued functionality, but you should update your configuration to use the new variables and at least use TCP.

A recent change in the container has meant we are migrating from SERVER/SERVER_PORT to OUTPUT_SERVER/OUTPUT_SERVER_PORT as a better name for what the variable is representing. The old variables will continue to work for the time being, but please update your configuration to use the new variables. Simply replace SERVER with OUTPUT_SERVER and SERVER_PORT with OUTPUT_SERVER_PORT. If you do not have SERVER/SERVER_PORT set, you do not need to do anything and it will work as it did before.

Generally speaking for a proper migration, whatever your SERVER was before should be set in your compose as OUTPUT_SERVER and whatever your SERVER_PORT was before should be set as OUTPUT_SERVER_PORT. If SERVER was not set, you do not have to add in OUTPUT_SERVER. If you did not have SERVER_PORT set in your compose, you do not have to add in OUTPUT_SERVER_PORT unless you want to use zmq.

Additionally, the OUTPUT_SERVER_MODE variable has been added to allow for the output mode to be set. The default is udp and the container will function as it did before. tcp and zmq are also valid options and recommended over udp for reliability.

To use tcp with acars_router with the default ports it would have mapped, simply set OUTPUT_SERVER_MODE=tcp and leave the OUTPUT_SERVER_PORT as 5550 or unset.

If you wish to use zmq with acars_router with the default ports it would have mapped, simply set OUTPUT_SERVER_MODE=zmq and set OUTPUT_SERVER_PORT as 35550.