A lightweight Docker image for an Exim mail relay, based on the official Alpine image.
For extra security, the container runs as exim (uid=100
and gid=101
), not root.
This is a fork of Industrie&Co's wonderful (but seemingly unmaintained) industrieco/docker-exim-relay image. The following changes have been done on top of it:
based on a newer Alpine release (and thus, newer exim)
removing Received headers for mail received by exim (helps email deliverability)
This will allow relay from all private address ranges and will relay directly to the internet receiving mail servers
docker run \
--user=100:101 \
--name smtp \
--restart always \
-e HOSTNAME=my.host.name \
-d \
-p 25:8025 \
docker.io/devture/exim-relay:SOME_TAGGED_RELEASE
Note: we advise setting the hostname using a HOSTNAME
environment variable, instead of --hostname
. Since Docker 20.10, the latter has the side-effect of making other services on the same Docker network resolve said hostname to the in-container IP address of the mailer container. If you'd rather this hostname resolves to the actual public IP address, avoid using --hostname
.
To send forward outgoing email to a smart relay host
docker run \
--user=100:101 \
--name smtp \
--restart always \
-d \
-p 25:8025 \
-e HOSTNAME=my.host.name \
-e SMARTHOST=some.relayhost.name::587 \
-e SMTP_USERNAME=someuser \
-e SMTP_PASSWORD=password \
docker.io/devture/exim-relay:SOME_TAGGED_RELEASE
To sign outgoing email with DKIM
docker run \
--user=100:101 \
--name smtp \
--restart always \
-d \
-p 25:8025 \
-e HOSTNAME=my.host.name \
-e SMARTHOST=some.relayhost.name::587 \
-e SMTP_USERNAME=someuser \
-e SMTP_PASSWORD=password \
--mount type=bind,src=/PATH/TO/THE/PRIVATE/KEY.pem,dst=/etc/exim/dkim.pem,ro \
docker.io/devture/exim-relay:SOME_TAGGED_RELEASE
version: "3.7"
services:
smtp:
image: docker.io/devture/exim-relay:SOME_TAGGED_RELEASE
user: 100:101
restart: always
ports:
- "25:8025"
environment:
HOSTNAME: my.host.name
SMARTHOST: some.relayhost.name::587
SMTP_USERNAME: someuser
SMTP_PASSWORD: password
HELO
message.If the environment variable is set, sender address verification will be disabled.
The smarthost password can also be supplied via docker swarm secrets / rancher secrets. Create a secret called SMTP_PASSWORD and don't use the SMTP_PASSWORD environment variable
The logs are sent to /dev/stdout and /dev/stderr and can be viewed via docker logs
docker logs smtp
docker logs -f smtp
Exim commands can be run to check the status of the mail server as well
docker exec -ti smtp exim -bp