Skip to content

Docker Deployment

Supported Architectures

Transfer Agent supports multiple architectures to allow for deployment in different unique environments.

Utilizing the masvio/transfer-agent:latest image will automatically pull the correct architecture for your system.

The architectures supported by this image are:

Architecture Tag
x86-64 latest
arm64 latest

Version Tags

We support a number of different tags for our users and internal development. We recommend using the latest tag for the latest updates and security patches. Other non-version stubbed tags can be unstable and may result in lost data.

Tag Description
latest Stable Transfer Agent release
develop Release from development branch
x.y.z Specific tagged version

Transfer Agent Setup

Provisioning the Docker image can be very simple. We provide an initial provisioning script to manage automations and authentication of the Transfer Agent.

By default, you can access the transfer agent at:


Docker Compose

MASV recommends Docker Compose for managing Transfer Agent in Docker.

version: "3"
    image: masvio/transfer-agent:latest
    container_name: transfer-agent
      - TZ=UTC
      - /path/to/your/config/:/config
      - /path/to/your/data/:/data
      - 8080:8080
    restart: unless-stopped

To authenticate with a docker-compose file, define a Docker environment variable or Docker secret.

This example uses an environment variable, API_KEY to pass to the Transfer Agent service command line:

version: "3"
    image: masvio/transfer-agent:latest
    container_name: transfer-agent
      - TZ=UTC
      - API_KEY=${API_KEY}
      - /path/to/your/config/:/config
      - /path/to/your/data/:/data
      - 8080:8080
    restart: unless-stopped
    command: ["-api-key", "$API_KEY"]

Docker command line

You can start and stop Transfer Agent in Docker from the command line.

# Other flags can be defined as outlined in the Parameters section
docker run -it --rm \
  -p \
  -e TZ=UTC \
  -v /path/to/your/config:/config \
  -v /path/to/your/data:/data \

Environment Variables -e

Flags Type Description
TZ String Specify a timezone to use EG America/Halifax, this is required for automations. Default: UTC


You should include a TZ variable. Transfer Agent accepts datetime parameters in API calls and users should expect their Transfer Agent timezone to match the host machine.


We can configure the Transfer Agent on launch using various command-line flags. The flag name and its description are below.

Flags Type Description
listen String Listen address (port will be system assigned if not specified or 0) (default "http://localhost:8080")
log-format String Easy Logrus log format (default "[%lvl%] %time%: %msg%\n")
log-level String Log level (debug, info, warning, error) (default "debug")
log-out String Where the logs are written (stdout, stderr, {filename}) (default "stdout")
log-timestamp-format String Easy Logrus timestamp format (default "15:04:05")
secret-key String Secret Key that the server will require as a header, for local security purposes
version null Shows the current version/build number, as well as any available updates


Our Transfer Agent expects and creates a few folders on creation of the Docker image. These folders can be overridden if required, but we recommend keeping the defaults.

Volume Usage
/config Store application configuration and saved application data
/data Default folder to mount in your automated downloads and uploads


Create these folders on the Docker host before starting the container. Otherwise, Docker creates these folders with root as owner.


Our Docker container allows for various files to be persisted between reboots.

State Database

All state belonging to the database is store in a SQLite database file. This gets loaded on startup of the Transfer Agent.

  • Default location
  • /config/app.db

Provisioning File

A provisioning file can be included to automatically create upload and download automations. For a more complete example of a provisioning config file, see provisioning

  • Default location
  • /config/config.yaml
# The authentication method for the MASV API. Depending on the mechanism used, it can either have:
#   - An api_key property for API key based authentication (recommended)
#   - email and password properties for user-based authentication (not recommended)
   # for API key authentication
   api_key: your-api-key
   # Alternativeley you can use the following for user-based auth
   # email: [email protected]
   # password: topsecret
  upload_rate_limit: 100000
  download_rate_limit: 100000
  - 1:
    name: portal-download-auto
    portal_subdomain: YourPortalSubdomain
    destination_folder: /data/portal-downloads
    effective_time: 2021-07-30T00:00:00Z
    enabled: true
  - 1:
    name: portal-upload-auto
    portal_subdomain: YourPortalSubdomain
    portal_password: changeme1
    path: /data/portal-uploads
    sender_email: [email protected]
    timeout: 5
    delete_files_after_upload: false
    send_loose_files: false
    package_name_suffix: portal-suffix
    message: portal upload msg
    blacklist: ["*.png"]
    enabled: true