This dockerfile provides a ready-to-go Baikal server.
For more details, see bwiedmann/baikal-docker (GitHub).
Tags without a version are weekly re-builds to include the latest base image with the most recent updates:
latestandapacheare re-builds of the latest*-apacheversionapache-php8.2are re-builds of the latest*-apache-php8.2versionnginxare re-builds of the latest*-nginxversionnginx-php8.2are re-builds of the latest*-nginx-php8.2version
I follow the same version naming scheme as Baikal themselves.
The following tags support multiple architectures, e.g. amd64, arm32v7, arm64v8 and i386.
0.11.1,0.11.1-apache0.11.1-apache-php8.2,0.11.1-php8.20.11.1-nginx0.11.1-nginx-php8.20.10.1,0.10.1-apache0.10.1-apache-php8.2,0.10.1-php8.20.10.1-nginx0.10.1-nginx-php8.20.10.0,0.10.0-apache0.10.0-apache-php8.2,0.10.0-php8.20.10.0-nginx0.10.0-nginx-php8.20.9.5,0.9.5-apache0.9.5-apache-php8.2,0.9.5-php8.20.9.5-nginx0.9.5-nginx-php8.2
For earlier versions all the way back to version 0.2.7, please search in the tags tab. Version 0.4.5 and older are only available for amd64. Version 0.9.0 and older do not support i386.
- Where to file issues: https://github.com/bwiedmann/baikal-docker/issues
- Supported architectures (more info):
amd64,arm32v7,arm64v8,i386 - Image updates: PRs for bwiedmann/baikal-docker
- Source of this description: https://github.com/bwiedmann/baikal-docker
From sabre.io/baikal:
Baikal is a Cal and CardDAV server, based on sabre/dav, that includes an administrative interface for easy management.
For more information, read the main website at baikal-server.com.
Baikal is developed by Net Gusto and fruux.
The following command will start Baikal:
docker run --rm -it -p 80:80 bwiedmann/baikal:nginxAlternatively, use the provided examples/docker-compose.yaml from the Git repository:
docker compose upYou can now open http://localhost or http://host-ip in your browser and use Baikal.
The image exposes the /var/www/baikal/Specific and /var/www/baikal/config folders, which contain the persistent data. These folders should be part of a regular backup.
If you want to use local folders instead of Docker volumes, see examples/docker-compose.localvolumes.yaml to avoid file permission issues.
When adding a Baikal account in macOS Calendar or Contacts (Internet Accounts), the Web Admin UI suggests URLs like:
- Calendar (CalDAV):
/dav.php/calendars/username/default - Contacts (CardDAV):
/dav.php/addressbooks/username/default/
However, macOS requires the full path with dav.php/principals/username/ format. Use these URLs in the setup dialog:
For Calendar (CalDAV):
https://yourdomain.tld/dav.php/principals/username/
For Contacts (CardDAV):
https://yourdomain.tld/dav.php/principals/username/
Important: After entering the server address, macOS will prompt you for the path again. Enter
/dav.php/principals/username/a second time in that dialog. This is a known sabre/dav quirk with macOS.
If you use the Baikal Web Admin's suggested URLs directly (e.g., /dav.php/calendars/username/default or /dav.php/addressbooks/username/default/), the setup will fail.
You can find more installation and configuration guides here:
The bwiedmann/baikal images come in several flavors, each designed for a specific use case.
This is the defacto image and follows the official guidelines the closest using Apache httpd.
With that being said, it's worth checking out the nginx variant as it requires fewer resources and produces no warning messages out-of-the-box.
If you are unsure about what your needs are, you probably want to use this one though.
This image relies on Apache httpd and uses the official PHP image that's packaged with the Apache web server.
It also ships with HTTPS support and self-signed certificates, which can be replaced by user-provided certificates - for more details, see the SSL Certificate Guide.
This image uses environment variables to set Apache's ServerName and ServerAlias directives to avoid Apache httpd's warnings in the logs.
The BAIKAL_SERVERNAME environment variable is used to set the global ServerName directive, e.g. dav.example.io. For more details, see Apache Core Features: ServerName Directive.
The BAIKAL_SERVERALIAS environment variable is used to set the ServerAlias directive of the VirtualHosts, e.g. dav.example.org dav.example.com. For more details, see Apache Core Features: ServerAlias Directive.
This image has the latest code from the source repository bwiedmann/baikal-docker, mainly used for testing before a version is released. Use this at your own risk.
This image relies on nginx and uses the official nginx image.
Compared to the Apache variant, it is significantly smaller (less than half the size) and produces no warning messages out-of-the-box.
When switching from the Apache image to the Nginx image (or vice versa), be aware of file ownership differences:
- Apache images run as user
www-data(Debian default) - Nginx images run as user
nginx
If you encounter "DB file is not writable" errors after switching images, the database directory needs proper ownership. Add the environment variable BAIKAL_ENABLE_CHOWN=true to your container to automatically fix permissions on startup:
docker run --rm -it -p 80:80 -e BAIKAL_ENABLE_CHOWN=true bwiedmann/baikal:nginxOr in your docker-compose.yml:
environment:
BAIKAL_ENABLE_CHOWN: "true"This enables the entrypoint scripts to run chown -R nginx:nginx /var/www/baikal (nginx) or chown -R www-data:www-data /var/www/baikal (apache).