Почему 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.