Skip to content

[BUG] Docker mail server does not start with network_mode:"host" #2195

@zOthix

Description

@zOthix

Miscellaneous first checks

  • I checked that all ports are open and not blocked by my ISP / hosting provider.
  • I know that SSL errors are likely the result of a wrong setup on the user side and not caused by DMS itself. I'm confident my setup is correct.

Affected Component(s)

Docker Container does not start

What happened and when does this occur?

Docker is unable to start when i use network_mode: "host"

What did you expect to happen?

i expect the docker to start

How do we replicate the issue?

1.Follow normal steps in documentations
2.add a line -> network_mode: "host" , in Mailserver service
3.docker-compose up
...

DMS version

10.1.2

How much RAM is available to DMS explicitly?

more than 4GB

How many CPU cores are available?

more than 4 Cores

Is DMS running in a virtualized environment?

... a virtual private server (VPS) (with virtual CPU cores)

What operating system is DMS running on?

Linux

What instruction set architecture is DMS running on?

x86_64 / AMD64

I/O - Persistent memory

ext4

What container orchestration tool are you using?

Docker Compose

Docker version

No response

Docker Compose version

1.29.2

The output of uname -a

Linux vmi662016.contaboserver.net 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux

Important environment variables

No response

Relevant log output

Creating mailserver ... done
Attaching to mailserver
mailserver    | hostname: Name or service not known
mailserver    | hostname: Name or service not known
mailserver    | [ TASKLOG ]  Welcome to docker-mailserver 10.1.2
mailserver    | [[  INF  ]]  ENVIRONMENT
mailserver    | SUPERVISOR_GROUP_NAME=mailserver
mailserver    | POSTGREY_DELAY=300
mailserver    | DEFAULT_RELAY_HOST=
mailserver    | TLS_LEVEL=intermediate
mailserver    | POSTSCREEN_ACTION=enforce
mailserver    | POSTFIX_INET_PROTOCOLS=all
mailserver    | ENABLE_SRS=0
mailserver    | ENABLE_LDAP=0
mailserver    | SPOOF_PROTECTION=0
mailserver    | RELAY_PASSWORD=
mailserver    | ENABLE_MANAGESIEVE=0
mailserver    | ENABLE_POSTGREY=0
mailserver    | SUPERVISOR_SERVER_URL=unix:///dev/shm/supervisor.sock
mailserver    | REPORT_SENDER=
mailserver    | HOSTNAME=
mailserver    | ENABLE_QUOTAS=1
mailserver    | ENABLE_SASLAUTHD=0
mailserver    | AMAVIS_LOGLEVEL=0
mailserver    | NETWORK_INTERFACE=eth0
mailserver    | SASLAUTHD_LDAP_TLS_CACERT_DIR=
mailserver    | DMS_DEBUG=1
mailserver    | SRS_EXCLUDE_DOMAINS=
mailserver    | LDAP_SEARCH_BASE=
mailserver    | SSL_CERT_PATH=
mailserver    | LDAP_QUERY_FILTER_USER=
mailserver    | SASLAUTHD_LDAP_BIND_DN=
mailserver    | RELAY_HOST=
mailserver    | LDAP_QUERY_FILTER_ALIAS=
mailserver    | PWD=/
mailserver    | SA_SPAM_SUBJECT=***SPAM*****
mailserver    | LDAP_SERVER_HOST=
mailserver    | DOVECOT_MAILBOX_FORMAT=maildir
mailserver    | SA_TAG2=6.31
mailserver    | REPORT_INTERVAL=daily
mailserver    | SASL_PASSWD=
mailserver    | POSTFIX_MAILBOX_SIZE_LIMIT=0
mailserver    | SMTP_ONLY=0
mailserver    | ENABLE_POSTFIX_VIRTUAL_TRANSPORT=
mailserver    | SSL_KEY_PATH=
mailserver    | ONE_DIR=1
mailserver    | RELAY_USER=
mailserver    | HOME=/root
mailserver    | SASLAUTHD_LDAP_SERVER=
mailserver    | LDAP_START_TLS=no
mailserver    | SASLAUTHD_LDAP_FILTER=
mailserver    | OVERRIDE_HOSTNAME=
mailserver    | LDAP_BIND_DN=
mailserver    | RELAY_PORT=25
mailserver    | SA_KILL=6.31
mailserver    | SASLAUTHD_LDAP_TLS_CHECK_PEER=
mailserver    | ENABLE_FETCHMAIL=0
mailserver    | FETCHMAIL_POLL=300
mailserver    | ENABLE_AMAVIS=1
mailserver    | SASLAUTHD_LDAP_MECH=
mailserver    | LDAP_BIND_PW=
mailserver    | UPDATE_CHECK_INTERVAL=1d
mailserver    | MOVE_SPAM_TO_JUNK=1
mailserver    | POSTMASTER_ADDRESS=
mailserver    | POSTFIX_MESSAGE_SIZE_LIMIT=10240000
mailserver    | LDAP_QUERY_FILTER_GROUP=
mailserver    | SA_TAG=2.0
mailserver    | DOVECOT_USER_FILTER=
mailserver    | ENABLE_FAIL2BAN=0
mailserver    | SSL_ALT_CERT_PATH=
mailserver    | DOVECOT_AUTH_BIND=
mailserver    | SASLAUTHD_LDAP_START_TLS=
mailserver    | LOGWATCH_INTERVAL=none
mailserver    | POSTGREY_MAX_AGE=35
mailserver    | ENABLE_POP3=0
mailserver    | PFLOGSUMM_SENDER=
mailserver    | LOGWATCH_RECIPIENT=
mailserver    | SASLAUTHD_LDAP_PASSWORD_ATTR=
mailserver    | DOVECOT_TLS=no
mailserver    | POSTGREY_AUTO_WHITELIST_CLIENTS=5
mailserver    | SHLVL=1
mailserver    | PFLOGSUMM_TRIGGER=
mailserver    | POSTGREY_TEXT=Delayed by Postgrey
mailserver    | SRS_SENDER_CLASSES=envelope_sender
mailserver    | FAIL2BAN_BLOCKTYPE=drop
mailserver    | SASLAUTHD_LDAP_AUTH_METHOD=
mailserver    | DOVECOT_PASS_FILTER=
mailserver    | SSL_TYPE=
mailserver    | CHKSUM_FILE=/tmp/docker-mailserver-config-chksum
mailserver    | PERMIT_DOCKER=
mailserver    | SRS_SECRET=
mailserver    | REPORT_RECIPIENT=0
mailserver    | SUPERVISOR_PROCESS_NAME=mailserver
mailserver    | POSTFIX_DAGENT=
mailserver    | VIRUSMAILS_DELETE_DELAY=7
mailserver    | SASLAUTHD_LDAP_SEARCH_BASE=
mailserver    | SASLAUTHD_MECH_OPTIONS=
mailserver    | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
mailserver    | SUPERVISOR_LOGLEVEL=warn
mailserver    | SASLAUTHD_MECHANISMS=
mailserver    | DOMAINNAME=
mailserver    | ENABLE_SPAMASSASSIN=0
mailserver    | SPAMASSASSIN_SPAM_TO_INBOX=1
mailserver    | SASLAUTHD_LDAP_PASSWORD=
mailserver    | SSL_ALT_KEY_PATH=
mailserver    | ENABLE_CLAMAV=0
mailserver    | SASLAUTHD_LDAP_TLS_CACERT_FILE=
mailserver    | LDAP_QUERY_FILTER_DOMAIN=
mailserver    | PFLOGSUMM_RECIPIENT=
mailserver    | ENABLE_UPDATE_CHECK=1
mailserver    | SUPERVISOR_ENABLED=1
mailserver    | BASH_FUNC__extract_certs_from_acme%%=() {  local KEY;
mailserver    |  KEY=$(cat /etc/letsencrypt/acme.json | python -c "
mailserver    | import sys,json
mailserver    | acme = json.load(sys.stdin)
mailserver    | for key, value in acme.items():
mailserver    |     certs = value['Certificates']
mailserver    |     if certs is not None:
mailserver    |         for cert in certs:
mailserver    |             if 'domain' in cert and 'key' in cert:
mailserver    |                 if 'main' in cert['domain'] and cert['domain']['main'] == '${1}' or 'sans' in cert['domain'] and '${1}' in cert['domain']['sans']:
mailserver    |                     print cert['key']
mailserver    |                     break
mailserver    | ");
mailserver    |  local CERT;
mailserver    |  CERT=$(cat /etc/letsencrypt/acme.json | python -c "
mailserver    | import sys,json
mailserver    | acme = json.load(sys.stdin)
mailserver    | for key, value in acme.items():
mailserver    |     certs = value['Certificates']
mailserver    |     if certs is not None:
mailserver    |         for cert in certs:
mailserver    |             if 'domain' in cert and 'certificate' in cert:
mailserver    |                 if 'main' in cert['domain'] and cert['domain']['main'] == '${1}' or 'sans' in cert['domain'] and '${1}' in cert['domain']['sans']:
mailserver    |                     print cert['certificate']
mailserver    |                     break
mailserver    | ");
mailserver    |  if [[ -n "${KEY}${CERT}" ]]; then
mailserver    |  mkdir -p "/etc/letsencrypt/live/${HOSTNAME}/";
mailserver    |  echo "${KEY}" | base64 -d > /etc/letsencrypt/live/"${HOSTNAME}"/key.pem || exit 1;
mailserver    |  echo "${CERT}" | base64 -d > /etc/letsencrypt/live/"${HOSTNAME}"/fullchain.pem || exit 1;
mailserver    |  _notify 'inf' "Cert found in /etc/letsencrypt/acme.json for ${1}";
mailserver    |  return 0;
mailserver    |  else
mailserver    |  return 1;
mailserver    |  fi
mailserver    | }
mailserver    | BASH_FUNC__monitored_files_checksums%%=() {  ( cd /tmp/docker-mailserver || exit 1;
mailserver    |  exec sha512sum -- postfix-accounts.cf postfix-virtual.cf postfix-aliases.cf dovecot-quotas.cf /etc/letsencrypt/acme.json "/etc/letsencrypt/live/${HOSTNAME}/key.pem" "/etc/letsencrypt/live/${HOSTNAME}/privkey.pem" "/etc/letsencrypt/live/${HOSTNAME}/fullchain.pem" 2> /dev/null )
mailserver    | }
mailserver    | BASH_FUNC__populate_relayhost_map%%=() {  : > /etc/postfix/relayhost_map;
mailserver    |  chown root:root /etc/postfix/relayhost_map;
mailserver    |  chmod 0600 /etc/postfix/relayhost_map;
mailserver    |  if [[ -f /tmp/docker-mailserver/postfix-relaymap.cf ]]; then
mailserver    |  _notify 'inf' "Adding relay mappings from postfix-relaymap.cf";
mailserver    |  sed -n '/^\s*[^#[:space:]]\S*\s\+\S/p' /tmp/docker-mailserver/postfix-relaymap.cf >> /etc/postfix/relayhost_map;
mailserver    |  fi;
mailserver    |  { 
mailserver    |  sed -n '/^\s*[^#[:space:]]/ s/^[^@|]*@\([^|]\+\)|.*$/\1/p' /tmp/docker-mailserver/postfix-accounts.cf;
mailserver    |  [ -f /tmp/docker-mailserver/postfix-virtual.cf ] && sed -n '/^\s*[^#[:space:]]/ s/^\s*[^@[:space:]]*@\(\S\+\)\s.*/\1/p' /tmp/docker-mailserver/postfix-virtual.cf
mailserver    |  } | while read -r DOMAIN; do
mailserver    |  if ! grep -q -e "^@${DOMAIN}\b" /etc/postfix/relayhost_map && ! grep -qs -e "^\s*@${DOMAIN}\s*$" /tmp/docker-mailserver/postfix-relaymap.cf; then
mailserver    |  _notify 'inf' "Adding relay mapping for ${DOMAIN}";
mailserver    |  echo "@${DOMAIN}    [${RELAY_HOST}]:${RELAY_PORT}" >> /etc/postfix/relayhost_map;
mailserver    |  fi;
mailserver    |  done
mailserver    | }
mailserver    | BASH_FUNC__notify%%=() {  { 
mailserver    |  [[ -z ${1:-} ]] || [[ -z ${2:-} ]]
mailserver    |  } && return 0;
mailserver    |  local RESET LGREEN LYELLOW LRED RED LBLUE LGREY LMAGENTA;
mailserver    |  RESET='\e[0m';
mailserver    |  LGREEN='\e[92m';
mailserver    |  LYELLOW='\e[93m';
mailserver    |  LRED='\e[31m';
mailserver    |  RED='\e[91m';
mailserver    |  LBLUE='\e[34m';
mailserver    |  LGREY='\e[37m';
mailserver    |  LMAGENTA='\e[95m';
mailserver    |  case "${1}" in 
mailserver    |  'tasklog')
mailserver    |  echo "-e${3:-}" "[ ${LGREEN}TASKLOG${RESET} ]  ${2}"
mailserver    |  ;;
mailserver    |  'warn')
mailserver    |  echo "-e${3:-}" "[ ${LYELLOW}WARNING${RESET} ]  ${2}"
mailserver    |  ;;
mailserver    |  'err')
mailserver    |  echo "-e${3:-}" "[  ${LRED}ERROR${RESET}  ]  ${2}"
mailserver    |  ;;
mailserver    |  'fatal')
mailserver    |  echo "-e${3:-}" "[  ${RED}FATAL${RESET}  ]  ${2}"
mailserver    |  ;;
mailserver    |  'inf')
mailserver    |  [[ ${DMS_DEBUG} -eq 1 ]] && echo "-e${3:-}" "[[  ${LBLUE}INF${RESET}  ]]  ${2}"
mailserver    |  ;;
mailserver    |  'task')
mailserver    |  [[ ${DMS_DEBUG} -eq 1 ]] && echo "-e${3:-}" "[[ ${LGREY}TASKS${RESET} ]]  ${2}"
mailserver    |  ;;
mailserver    |  *)
mailserver    |  echo "-e${3:-}" "[  ${LMAGENTA}UNKNOWN${RESET}  ]  ${2}"
mailserver    |  ;;
mailserver    |  esac;
mailserver    |  return 0
mailserver    | }
mailserver    | BASH_FUNC__sanitize_ipv4_to_subnet_cidr%%=() {  local DIGIT_PREFIX_LENGTH="${1#*/}";
mailserver    |  declare -a MASKED_DIGITS DIGITS;
mailserver    |  IFS='.';
mailserver    |  read -r -a DIGITS < <(echo "${1%%/*}");
mailserver    |  unset IFS;
mailserver    |  for ((i = 0 ; i < 4 ; i++))
mailserver    |  do
mailserver    |  MASKED_DIGITS[i]=$(_mask_ip_digit "${DIGIT_PREFIX_LENGTH}" "${DIGITS[i]}");
mailserver    |  DIGIT_PREFIX_LENGTH=$((DIGIT_PREFIX_LENGTH - 8));
mailserver    |  done;
mailserver    |  echo "${MASKED_DIGITS[0]}.${MASKED_DIGITS[1]}.${MASKED_DIGITS[2]}.${MASKED_DIGITS[3]}/${1#*/}"
mailserver    | }
mailserver    | _=/usr/bin/printenv
mailserver    | [ TASKLOG ]  Initializing setup
mailserver    | [[ TASKS ]]  Registering functions
mailserver    | [[  INF  ]]  _check_hostname() registered
mailserver    | [[  INF  ]]  _setup_supervisor() registered
mailserver    | [[  INF  ]]  _setup_default_vars() registered
mailserver    | [[  INF  ]]  _setup_file_permissions() registered
mailserver    | [[  INF  ]]  _setup_dovecot() registered
mailserver    | [[  INF  ]]  _setup_dovecot_dhparam() registered
mailserver    | [[  INF  ]]  _setup_dovecot_quota() registered
mailserver    | [[  INF  ]]  _setup_dovecot_local_user() registered
mailserver    | [[  INF  ]]  _setup_dkim() registered
mailserver    | [[  INF  ]]  _setup_ssl() registered
mailserver    | [[  INF  ]]  _setup_docker_permit() registered
mailserver    | [[  INF  ]]  _setup_mailname() registered
mailserver    | [[  INF  ]]  _setup_amavis() registered
mailserver    | [[  INF  ]]  _setup_dmarc_hostname() registered
mailserver    | [[  INF  ]]  _setup_postfix_hostname() registered
mailserver    | [[  INF  ]]  _setup_dovecot_hostname() registered
mailserver    | [[  INF  ]]  _setup_postfix_smtputf8() registered
mailserver    | [[  INF  ]]  _setup_postfix_sasl() registered
mailserver    | [[  INF  ]]  _setup_postfix_sasl_password() registered
mailserver    | [[  INF  ]]  _setup_security_stack() registered
mailserver    | [[  INF  ]]  _setup_postfix_aliases() registered
mailserver    | [[  INF  ]]  _setup_postfix_vhost() registered
mailserver    | [[  INF  ]]  _setup_postfix_dhparam() registered
mailserver    | [[  INF  ]]  _setup_postfix_postscreen() registered
mailserver    | [[  INF  ]]  _setup_postfix_sizelimits() registered
mailserver    | [[  INF  ]]  _setup_postfix_access_control() registered
mailserver    | [[  INF  ]]  _setup_postfix_override_configuration() registered
mailserver    | [[  INF  ]]  _setup_environment() registered
mailserver    | [[  INF  ]]  _setup_logrotate() registered
mailserver    | [[  INF  ]]  _setup_mail_summary() registered
mailserver    | [[  INF  ]]  _setup_logwatch() registered
mailserver    | [[  INF  ]]  _setup_user_patches() registered
mailserver    | [[  INF  ]]  _setup_chksum_file() registered
mailserver    | [[  INF  ]]  _fix_var_mail_permissions() registered
mailserver    | [[  INF  ]]  _fix_var_amavis_permissions() registered
mailserver    | [[  INF  ]]  _fix_cleanup_clamav() registered
mailserver    | [[  INF  ]]  _fix_cleanup_spamassassin() registered
mailserver    | [[  INF  ]]  _misc_save_states() registered
mailserver    | [[  INF  ]]  _start_daemons_cron() registered
mailserver    | [[  INF  ]]  _start_daemons_rsyslog() registered
mailserver    | [[  INF  ]]  _start_daemons_dovecot() registered
mailserver    | [[  INF  ]]  _start_daemons_update_check() registered
mailserver    | [[  INF  ]]  _start_daemons_opendkim() registered
mailserver    | [[  INF  ]]  _start_daemons_opendmarc() registered
mailserver    | [[  INF  ]]  _start_daemons_postfix() registered
mailserver    | [[  INF  ]]  _start_changedetector() registered
mailserver    | [[  INF  ]]  _start_daemons_amavis() registered
mailserver    | [ TASKLOG ]  Checking configuration
mailserver    | [[ TASKS ]]  Checking that hostname/domainname is provided or overridden
mailserver    | [[  INF  ]]  Domain has been set to 
mailserver    | [[  INF  ]]  Hostname has been set to 
mailserver    | [  ERROR  ]  Setting hostname/domainname is required
mailserver    | [  ERROR  ]  Shutting down..
mailserver    | 2021-09-15 06:28:17,487 WARN received SIGTERM indicating exit request
mailserver    | [  FATAL  ]  Please fix your configuration. Exiting...

Other relevant information

docker mailserver works fine as long as i dont add the -> [[ nework_mode: "host" ]] option


my docker-compose file:

version: '3.9'

services:
  mailserver:
    image: docker.io/mailserver/docker-mailserver:latest
    hostname: sales
    domainname: medpricemarketing.com
    container_name: mailserver
    env_file: mailserver.env

#    ports:
#      - "25:25"    # SMTP  (explicit TLS => STARTTLS)
#      - "143:143"  # IMAP4 (explicit TLS => STARTTLS)
#      - "465:465"  # ESMTP (implicit TLS)
#      - "587:587"  # ESMTP (explicit TLS => STARTTLS)
#      - "993:993"  # IMAP4 (implicit TLS)

    volumes:
      - ./data/maildata:/var/mail
      - ./data/mailstate:/var/mail-state
      - ./data/maillogs:/var/log/mail
      - /etc/localtime:/etc/localtime:ro
      - ./config/:/tmp/docker-mailserver/

    network_mode: "host"
    restart: always
    stop_grace_period: 1m
    cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]


if i uncomment ports and comment the network, it will start working with 0 errors

What level of experience do you have with Docker and mail servers?

I'm comfortable with Docker / containers, but I'm relatively new to all this mail stuff

Code of conduct

Improvements to this form?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions