Настройка SMTP-сервера для вашего приложения в контейнере - PullRequest
0 голосов
/ 22 октября 2018

У меня есть приложение, которое отправляет электронную почту и требует, чтобы smtp работал на порту 25. Для которого я создал другой контейнер и сопоставил порт 25 от хоста к контейнеру.

Это не очень хорошо работало, так как продолжало выбрасыватьследующая ошибка

ERROR: for smtp Cannot start service smtp: driver failed programming external connectivity on endpoint push_smtp_1 (25f260f6185dd34cfdb8fb9956c28187028aaca4d850d7a73acc4c2180c55696): Error starting userland proxy: Bind for 0.0.0.0:25: unexpected error (Failure EADDRINUSE)

Не уверен, что здесь может быть не так, следуя другим постам, я попытался перезапустить докер-клиент, а также убедился, что на порту 25 больше ничего не работает1008 * Дайте мне знать, если я что-то здесь упускаю.

Вторая часть этого вопроса - что такое идеальный способ работы с сервером SMTP.

  1. Если в контейнере приложения будет создан сервер smtp.Наткнулся на этот блог http://www.tothenew.com/blog/setting-up-sendmail-inside-your-docker-container/

  2. Если нет (1), то лучше создать контейнер smtp и сопоставить порты. Так, в чем причина получения вышеуказанной ошибки.

Ниже показано, как мой докер-композитор:

version: '3'
services:
  push:
    image: emailService
    ports:
    - "9602:9602/tcp"
    networks:
    - default
    build:
      context: ./
      dockerfile: Dockerfile
      args:
      - "TARGET=build"
    depends_on:
    - gearmand
    - smtp
  smtp:
    image: catatnight/postfix:latest
    ports:
    - "25:25"
    networks:
    - default
  gearmand:
    image: <path>/<to>/gearmand:latest
    ports:
    - "4730:4730/tcp"
    networks:
    - default

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Используйте другой порт на хосте:

version: '3'
services:
  push:
    image: emailService
    ports:
    - "9602:9602/tcp"
    networks:
    - default
    build:
      context: ./
      dockerfile: Dockerfile
      args:
      - "TARGET=build"
    depends_on:
    - gearmand
    - smtp
  smtp:
    image: catatnight/postfix:latest
    ports:
    - "2525:25"
    networks:
    - default
  gearmand:
    image: <path>/<to>/gearmand:latest
    ports:
    - "4730:4730/tcp"
    networks:
    - default
0 голосов
/ 23 октября 2018

Если вы хотите, чтобы SMTP-сервер был просто доступен из другого контейнера, а не извне, нет необходимости сопоставлять порт.

При использовании docker-compose все определенные контейнеры будут автоматически добавлены всеть, в которой контейнеры могут связываться друг с другом по имени (см. https://docs.docker.com/compose/networking/). Если ваша пользовательская сеть по умолчанию - это мостовая сеть, это также будет работать.

Это означает, что ваш SMTP-контейнер будетбыть напрямую доступным на smtp:25 из других контейнеров (т.е. его внутреннего порта и внутреннего имени хоста вместо порта хоста и общедоступного IP-адреса вашего хоста докера).

Никто другой не сможет использовать ваш SMTP-сервервот так. Я думаю, это может привести к проблемам с получателями, которые не принимают отправленные им электронные письма (см. https://serverfault.com/q/364473). @David Maze имеет смысл сказать, что в любом случае, вероятно, лучше использовать публичного / официального почтового провайдера.

0 голосов
/ 22 октября 2018

Я думаю, проблема в том, что у вас есть что-то еще на хосте, который уже прослушивает этот порт

Попытайтесь выяснить, какие порты на хосте слушают с https://www.cyberciti.biz/faq/how-do-i-find-out-what-ports-are-listeningopen-on-my-linuxfreebsd-server/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...