docker-postfix
docker-postfix copied to clipboard
Ability to run as a non-root user and / or with persisted volumes
When running as a non-root user, container fails to start due to permission problems with /etc/postfix.
When mounting /etc/postfix and /var/spool/postfix, the container fails due to /etc/postfix/main.cf not existing.
Suggestions:
- Copy default
main.cfif target does not exist. touch main.cfto ensure it exists.- Set permissions such that a non-root user can be used.
Prep:
#!/bin/bash
set -ea && source .env && set +a
function create_dir() {
local root_dir="$1"
shift
local sub_dirs=("$@")
echo "Creating : \"$root_dir\""
sudo mkdir -p "$root_dir"
for sub_dir in "${sub_dirs[@]}";
do
echo "Creating : \"$root_dir/$sub_dir\""
sudo mkdir -p "$root_dir/$sub_dir"
done
echo "Setting ownership to : \"${USER_NONROOT_NAME}:${USERS_GROUP_NAME}\""
sudo chown -R ${USER_NONROOT_NAME}:${USERS_GROUP_NAME} "$root_dir"
sudo chmod -R ugo=rwx "$root_dir"
}
create_dir "${APPDATA_DIR}/postfix" "config" "spool"
sudo touch "${APPDATA_DIR}/postfix/config/main.cf"
create_dir "${APPDATA_DIR}/postfix" "config" "spool"
Compose:
postfix:
image: docker.io/juanluisbaptiste/postfix:latest
container_name: postfix
hostname: smtp
domainname: ${DOMAIN_NAME}
restart: unless-stopped
user: ${USER_NONROOT_ID}:${USERS_GROUP_ID}
environment:
- TZ=${TZ}
- SERVER_HOSTNAME=smtp.${DOMAIN_NAME}
- SMTP_SERVER=$EXTERNAL_SMTP_SERVER
- SMTP_PORT=$EXTERNAL_SMTP_PORT
- SMTP_USERNAME=${EXTERNAL_SMTP_USERNAME}
- SMTP_PASSWORD_FILE=/run/secrets/external_smtp_password
- DEBUG=yes
volumes:
- ${APPDATA_DIR}/postfix/config:/etc/postfix
- ${APPDATA_DIR}/postfix/spool:/var/spool/postfix
networks:
public_network:
priority: 1000
ipv4_address: ${SMTP_IP}
local_network:
secrets:
- external_smtp_password