Posts

Showing posts with the label How To

Docker Mailserver Upgrade to v16: 4 Steps and 3 Mistakes

Image
A docker mailserver upgrade from 15.x to 16.x is not just a new image tag. Version 16.0.0 moves the image from Debian 12 to Debian 13 and from Dovecot 2.3 to Dovecot 2.4. Your mail and accounts survive the switch, but an old dovecot.cf with 2.3 setting names stops Dovecot completely, SA_SPAM_SUBJECT is rejected, and DHE ciphers disappear from ports 587 and 993. The container still reports "up and running". Below is the full upgrade on a test server, what broke and the exact fixes. Lab: docker-mailserver 15.1.0 upgraded to 16.0.1 on the same volumes, rootless podman 5.8 (the docker commands are identical), a Debian 13 client container with swaks, curl and openssl, October 2026. Every output below comes from that lab. Sources: the docker-mailserver v16.0.0 release , its CHANGELOG and the Dovecot 2.3 to 2.4 upgrade guide . Docker mailserver upgrade to v16, in short: Back up docker-data/dms/ and stop the container. Rename 2.3 settings in config/dovecot.cf (for exampl...

Docker Mailserver Healthcheck: 7 Proven Tests in v16

Image
Since docker-mailserver v16.0.0 the image ships a docker mailserver healthcheck out of the box: a script called dms-healthcheck and a HEALTHCHECK --start-period=30s CMD dms-healthcheck line in the Dockerfile. The script checks that every supervisor service your configuration enables (Postfix, Dovecot, cron, rsyslog, OpenDKIM, Rspamd and so on) is RUNNING . On Docker the container then shows (healthy) or (unhealthy) with no extra configuration. On podman the image healthcheck is not used at all, so you have to add --health-cmd dms-healthcheck yourself. Every example below was tested on 2026-10-22 with mailserver/docker-mailserver:16.0.1 and :15.1.0 on Docker Engine 29.9.1 (the official docker:29.9.1-dind image) with Docker Compose v5.6.0, and with ghcr.io/docker-mailserver/docker-mailserver:16.0.1 on rootless podman 5.8.9. Rspamd, OpenDKIM, OpenDMARC, Amavis, ClamAV, Fail2Ban and Postgrey were disabled to keep the lab small. All output is copied from the lab. Contents What ...

Compile Linux Kernel: 9 Easy Steps and 5 Errors Fixed

Image
To compile Linux kernel source on Debian or Ubuntu: install build-essential flex bison bc libssl-dev libelf-dev , download and verify the tarball from kernel.org, copy your running config with cp /boot/config-$(uname -r) .config , run make olddefconfig , build with make -j$(nproc) , then sudo make modules_install and sudo make install and reboot. This guide walks through every step with real output, including the four build errors you get when a package is missing and the certificate error that stops most Ubuntu builds. Every command used to compile Linux kernel 7.2.12 below was run on 2026-10-23 in a Debian 12 (bookworm) KVM virtual machine with 12 vCPUs and 5 GiB RAM, gcc 12.2.0 and binutils 2.40, building Linux 7.2.12, the latest stable release on kernel.org that day. The VM started on the distro kernel 6.1.0-47-amd64. All output is copied from two lab runs. Contents What you need before you compile Linux kernel source Step 1: download and verify the source before you compile ...

docker ps --filter annotation: 9 Easy Examples and Errors

Image
Docker Engine 29.8.0 added an annotation filter to the container list. Run docker ps --filter annotation=KEY to list containers that carry an annotation key, or docker ps --filter annotation=KEY=VALUE to match the key and the exact value. Older engines (29.7.x and before) store annotations set with docker run --annotation , but answer the same filter with Error response from daemon: invalid filter 'annotation' . Every example below was tested on 2026-10-20 with the official images docker:29.9.1-dind (API 1.56) and docker:29.7.2-dind (API 1.55), each running in a rootless podman container. All output is copied from that lab; nothing is shortened except long container IDs. Contents What changed in Docker 29.8.0 Annotations vs labels docker ps --filter annotation: key and key=value Exact match only: no wildcards, case-sensitive Empty values Combining docker ps --filter annotation with other filters The label filter does not see annotations Use the filter with stop, inspec...

Prometheus Unix Socket Scraping (3.15): 6 Easy Tests, Errors

Image
Prometheus 3.15.0 can scrape a target over a Unix domain socket. Set the special label __unix_socket__ to the socket path, either in static_configs labels or with relabel_configs , and Prometheus connects to that file instead of a host and port. A Prometheus Unix socket scrape lets you monitor an exporter that has no TCP port at all. Older versions accept the same config file without error but ignore the label and try to resolve the target name with DNS. Every Prometheus Unix socket example below was tested on 2026-10-19 with the official images prom/prometheus:v3.15.0 and v3.13.4 , node_exporter v1.12.1 and socat 1.8.0.3 in rootless podman containers. All output is copied from the lab. Contents What changed in Prometheus 3.15.0 Prometheus Unix socket lab: an exporter without a network Prometheus Unix socket scrape with static_configs Same file on Prometheus 3.13.4 Many sockets with file_sd and relabel_configs Expose your own app metrics on a Unix socket Prometheus Unix socket e...

Docker Mailserver Setup: 7 Easy Steps and 5 Mistakes

Image
Docker Mailserver (the docker-mailserver project, DMS) is a complete mail server in one container: Postfix for SMTP, Dovecot for IMAP, OpenDKIM, Amavis and optional spam and virus filters, configured through one environment file and a setup command. This guide sets up Docker Mailserver 16.0.1 with the project's own compose.yaml , creates accounts and an alias, sends and reads real mail, and generates DKIM keys. Every output below comes from a test run on 17 October 2026 (podman 5.8 with podman-compose on a Fedora host as the engine; the docker commands are identical), including five errors you are likely to meet. curl -sO https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/v16.0.1/compose.yaml curl -sO https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/v16.0.1/mailserver.env docker compose up -d docker exec -it mailserver setup email add admin@example.com # within 120 s of the first start docker exec mailserver setup config dkim ...