In the last few weeks we’ve had customers ask for the ability to run DoltLab with Podman instead of Docker. For those who don’t know, Podman is an open-source container engine for managing containers, pods, and images. It is also compatible with OCI-compliant container formats, including Docker, which allows Podman users to run Docker images and Docker Compose files.
Since DoltLab runs via Docker Compose and Docker Swarm, it made sense that it should also be deployable via Podman for teams that prefer that runtime.
Today we’re excited to announce that DoltLab v2.4.7 includes official Podman deployment support. This post covers how to get started running DoltLab with Podman.
Prerequisites#
Preparing for a Podman deployment of DoltLab is identical to preparing for a standard DoltLab deployment. You’ll need a host with sufficient memory and disk, and you’ll need to make sure the required
ports are open on the host: 80, 50051, and 4321. For our example deployment, I’ll be choosing a t2.large AWS EC2 host, assigning it a public IP address,
and configuring the security group to allow ingress on these three ports.
Installation#
Once the host is online, SSH into it and install the unzip utility if it’s not already installed, then download the latest DoltLab release. This can be done with curl.
Next, unzip the DoltLab zip file and cd into the resulting directory. To install all the dependencies DoltLab needs, use the included installer binary with the --ubuntu flag
to generate an installation script you can run to quickly install dependencies, including Podman (and podman compose/podman-compose) as well as Docker and Docker Compose. I recommend using this script to install DoltLab’s dependencies.
ubuntu@ip-10-2-2-158:~$ sudo apt update -y && sudo apt install unzip -y
...
ubuntu@ip-10-2-2-158:~$ curl -LO https://doltlab-releases.s3.us-east-1.amazonaws.com/linux/amd64/doltlab-v2.4.7.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27.1M 100 27.1M 0 0 28.3M 0 --:--:-- --:--:-- --:--:-- 28.3M
ubuntu@ip-10-2-2-158:~$ unzip doltlab-v2.4.7.zip -d doltlab
Archive: doltlab-v2.4.7.zip
inflating: doltlab/installer
inflating: doltlab/smtp_connection_helper
inflating: doltlab/installer_config.yaml
ubuntu@ip-10-2-2-158:~$ cd doltlab
ubuntu@ip-10-2-2-158:~/doltlab$ ./installer --ubuntu
2025-10-31T17:23:49.370Z INFO metrics/emitter.go:111 Successfully sent DoltLab usage metrics
2025-10-31T17:23:49.370Z INFO cmd/main.go:711 To install DoltLab's dependencies, use this script {"script": "/home/ubuntu/doltlab/ubuntu_install.sh"}
ubuntu@ip-10-2-2-158:~/doltlab$ ./ubuntu_install.sh
After executing the installation script, you’re ready to configure your host and DoltLab instance.
Configuration#
With Podman, your host may not allow you to bind to privileged port 80 by default, even if it’s open in your security group. For example, you may see this error:
Error response from daemon: rootlessport cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or choose a larger port number (>= 1024): listen tcp 0.0.0.0:80: bind: permission denied
To avoid this error, edit /etc/sysctl.conf and add the line net.ipv4.ip_unprivileged_port_start=80. Then save and reload the config with:
ubuntu@ip-10-2-2-158:~/doltlab$ sudo sysctl -p
net.ipv4.ip_unprivileged_port_start = 80
Next, start the Podman API service on the host so podman compose (or podman-compose) can run DoltLab’s generated Compose file.
You can run it in the background or manage it with systemd; for this example we’ll start it in the background:
ubuntu@ip-10-2-2-158:~/doltlab$ podman system service -t 0 &
[1] 6285
Now configure the DoltLab instance using the installer_config.yaml file. At the top of the file there’s a new runtime field with a default value of docker. Change this to podman so the installer generates Podman-specific assets. Since this is an example deloyment, I’ll set runtime and the required host value and leave the rest at defaults. For production, be sure to change the default passwords in the configuration file.
# installer_config.yaml
version: "v2.4.7"
runtime: podman
host: "54.163.222.146"
...
After saving these edits, run the installer binary to generate the Podman assets.
ubuntu@ip-10-2-2-158:~/doltlab$ ./installer
2025-10-31T17:49:24.227Z INFO cmd/main.go:728 Successfully configured DoltLab core {"version": "v2.4.7"}
2025-10-31T17:49:24.227Z INFO cmd/main.go:735 To start DoltLab, use: {"script": "/home/ubuntu/doltlab/start.sh"}
2025-10-31T17:49:24.227Z INFO cmd/main.go:740 To stop DoltLab, use: {"script": "/home/ubuntu/doltlab/stop.sh"}
Deploy#
After running the installer, you’ll have start.sh and stop.sh scripts to start and stop your instance. To start DoltLab,
run ./start.sh. Podman will pull DoltLab’s service images and start them. You can then use Podman CLI commands to interact with and monitor
your DoltLab deployment.
ubuntu@ip-10-2-2-158:~/doltlab$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37011cd73334 quay.io/doltlab/dolthub-server:v2.4.7 npm start 7 seconds ago Up 7 seconds doltlab-doltlabui-1
177498d3766c quay.io/doltlab/dolthubapi-server:v2.4.7 -doltlab -outboun... 7 seconds ago Up 7 seconds doltlab-doltlabapi-1
995d6899baf1 quay.io/doltlab/dolt-sql-server:v2.4.7 -l debug 7 seconds ago Up 7 seconds doltlab-doltlabdb-1
98fd80840e90 quay.io/doltlab/fileserviceapi-server:v2.4.7 -outboundInternal... 7 seconds ago Up 7 seconds doltlab-doltlabfileserviceapi-1
0169a7523499 docker.io/envoyproxy/envoy:v1.33-latest -c /envoy.json 7 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:2001->2001/tcp, 0.0.0.0:4321->4321/tcp, 0.0.0.0:7770->7770/tcp, 0.0.0.0:50051->50051/tcp doltlab-doltlabenvoy-1
9c28ae667569 quay.io/doltlab/dolthubapi-graphql-server:v2.4.7 npm start 7 seconds ago Up 8 seconds doltlab-doltlabgraphql-1
d50ff4de2ef6 quay.io/doltlab/doltremoteapi-server:v2.4.7 -http-port 100 -o... 7 seconds ago Up 8 seconds doltlab-doltlabremoteapi-1
Conclusion#
We’re always excited when customers tell us how they’re using DoltLab and what features or tooling they’d like to see supported. Come by our Discord — we’d love to chat with you!
