Назад | Перейти на главную страницу

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

У меня есть контейнер 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.