Почему sendmail в контейнере не работает при работе на разных хостах?

У меня Docker-контейнер, работающий на Debian (натяжной). я имел sendmail установлен через apt-get install sendmail в контейнере Docker, чтобы я мог отправлять электронные письма из контейнера.

Вот как выглядит мой Dockerfile:

FROM php:5.6-apache
RUN apt-get update && \
  apt-get install -y sendmail && \
  apt-get clean

И я запускаю несколько команд для обновления файла хоста:

host=$(hostname)
line=$(cat /etc/hosts |grep [1]27.0.0.1)
echo "$line localhost.localdomain $host" >> /etc/hosts

Когда я запускаю контейнер на моей локальной машине разработчика (Windows) через Virtualbox, я могу отправлять электронные письма напрямую, используя sendmail Команда в Bash без проблем. Я могу получать эти письма в своем почтовом ящике.

Однако, когда я запускаю контейнер на облачном экземпляре (в моем случае на Digital Ocean), запуск sendmail Команда в Bash не отправляет электронные письма. Там нет ошибок или что бы то ни было. sendmail Команда только что вернулась, как будто письмо было успешно отправлено, но я никогда не получаю его в своем почтовом ящике.

Когда я запускаю mailq в контейнере Docker на моем облачном экземпляре, я вижу следующее сообщение об ошибке:

Mon Jun 25 02:05 <www-data@localhost.localdomain> (Deferred: Connection timed out with alt4.gmail-smtp-in.l.goo)

При запуске на моем локальном компьютере в mailq нет сообщений об ошибках в том же контейнере.

Не должен ли контейнер Docker работать одинаково даже на другом хост-компьютере? Почему sendmail работать при запуске в контейнере на моем локальном компьютере, но не при запуске его в облачном экземпляре?

1 ответ

Можете ли вы подключиться к любому серверу через порт 25, используя другие утилиты?

Вы можете легко проверить это с помощью telnet на сервере Google, который появляется в сообщении об ошибке. Если вы можете достичь этого, вы должны увидеть что-то вроде этого:

$ telnet alt4.gmail-smtp-in.l.google.com 25
Trying 74.125.195.26...
Connected to alt4.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP z2-v6si2977862pfz.241 - gsmtp

Если вы не можете, вы должны проверить любой брандмауэр, который у вас может быть. Digital Ocean имеет собственный брандмауэр, встроенный в панель управления. Если он настроен неправильно, возможно, отфильтрован порт 25.

Другие вопросы по тегам