У меня есть контейнер Docker, работающий на Debian (stretch). я имел 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
работать при запуске в контейнере на моем локальном компьютере, но не при запуске в облачном экземпляре?
Можно ли подключиться к любому серверу на 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.