Install Profinity with Docker
Run Profinity in a Docker container on most devices that can run Docker, including macOS and Linux machines and single-board computers such as the Raspberry Pi and BeagleBone Black.
Prohelion publishes the Profinity image for linux/amd64, linux/arm64, and linux/arm/v7, and Docker pulls the variant that matches the host processor.
A container binds all network interfaces, so other machines can reach it. A new installation starts a one-time 14-day local trial with the Server features. When the trial ends, Profinity keeps answering on its published ports in restricted mode, where only sign-in, the License page, and the logs work. Apply a licence file under ADMIN > License, as described in Apply a licence. For who can sign in, refer to Who can sign in, by installation type.
To upgrade a 2.2 container, read Upgrade from Profinity 2.2 first.
You need:
- Docker on the target device, on an x86-64, 64-bit ARM, or 32-bit ARM (ARMv7) processor
- Docker Compose, which Docker Desktop includes and which is available as a plugin on Linux
- A suitable CAN adapter for the target device
To install with a single script instead of a compose file, refer to Install Profinity with the Docker one-line installer. To move an existing installation to a newer image, refer to Update the Profinity Docker image.
Install with Docker Compose
- On the target device, create a new empty directory.
-
In the new directory, create a file named
docker-compose.ymlwith these contents:services: profinity: image: prohelion/profinity:latest restart: always #On linux hosts you can run in host mode to enable autodiscovery #network_mode: host ports: - 18080:18080 - 18443:18443 - 4876:4876 # PROFINITY_HOME must match the container-side mount path in volumes, otherwise the # security keys and profiles are written to the container's writable layer and are # lost when the image is updated environment: - PROFINITY_HOME=/app/Prohelion volumes: - $HOME/Prohelion:/app/Prohelion:rw -
On Linux, create the data directory and give the container user ownership of it, because the container runs as the non-root
appuser (ID 1654) and Docker otherwise creates the directory owned byroot: -
In the directory that holds the compose file, run
docker compose up -d. - Open
http://localhost:18080on the local machine, orhttp://<your-ip-address>:18080from another machine.
In the second address, replace <your-ip-address> with the address of the machine that runs Docker.
The sign-in page opens, as described under Sign in.
The compose file publishes ports 18080, 18443, and 4876, and sets PROFINITY_HOME to the path of the mounted volume.
For what each port does, what the data directory holds and why PROFINITY_HOME must match the mount path, refer to Docker ports and data directory.
To check where Profinity stores its files, open a shell in the running container with docker compose exec profinity bash, and run ls -la /app/Prohelion/.
The listing includes the config, profiles, and logs folders.
Start and stop Profinity
Run these commands from the directory that holds the docker-compose.yml file.
Docker Compose, not Profinity, starts the container on boot.
The restart: always line in the compose file restarts the container whenever Docker starts, so configure Docker to start on boot.
| Command | Effect |
|---|---|
docker compose up |
Starts Profinity in the foreground |
docker compose up -d |
Starts Profinity in the background (detached mode) |
docker compose stop |
Stops the containers and keeps them, so docker compose start can restart them |
docker compose down |
Stops the containers and removes them, so you run docker compose up again to recreate them |
docker compose logs -f |
Follows the log output |
Refer to the Docker Compose reference for more commands.
Sign in
The container serves HTTP with the default credentials, so follow the Security guide to enable HTTPS before you expose it beyond a trusted network. The browser opens the Profinity sign-in page.
On a fresh installation, sign in as admin with the password password, and choose a new password when Profinity asks for one at first sign-in.
For the accounts on each installation type, refer to Who can sign in, by installation type, and for how to choose the password, refer to the Security guide.
After you sign in, the Profinity homepage appears.
Expose devices to the container
Docker does not expose all devices to containers.
SocketCAN is the Linux kernel's CAN interface, which Profinity can read natively when it runs in Docker, as described in CAN bus adapters.
To use the host's SocketCAN interfaces, run the container on the host network.
On a Linux host, remove the # from the network_mode: host line in the docker-compose.yml file from the installation steps, then run docker compose up -d again.
The container then sees the host's CAN interfaces, and components that use UDP broadcasting can be discovered.
With host networking, Docker ignores the ports entries, because the container uses the host's ports directly.
Host networking is also what Profinity Mobile server discovery needs, because UDP broadcasts do not leave a Docker bridge network.
Run Profinity in production
For production environments, and deployments that run many Profinity instances, configure Profinity with environment variables so that one compose file can serve every instance.
The compose files, .env files, and environment-specific deployment examples are in Environment variables.
If the installation does not behave as described here, refer to Troubleshoot Profinity in Docker.

