email - 在容器中为您的应用程序设置 SMTP 服务器

标签 email docker smtp docker-container

我有一个发送电子邮件的应用程序,需要在端口 25 上运行 smtp。为此我创建了另一个容器并将端口 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)

不确定这里有什么问题,按照其他帖子,我尝试重新启动 docker 客户端,并验证端口 25 上没有其他任何东西在运行 lsof -i:25如果我在这里遗漏了什么,请告诉我。

这个问题的第二部分是,处理 smtp 服务器的理想方式是什么。

  1. smtp 服务器是否应该在应用程序容器中创建。看到这个博客 http://www.tothenew.com/blog/setting-up-sendmail-inside-your-docker-container/

  2. 如果不是(1),那么创建一个smtp容器并映射端口是否更好。是这样,出现上述错误的原因是什么。

下面是我的 docker-compose 的方式:

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

谢谢!

最佳答案

如果您希望 SMTP 服务器只能从其他容器访问,而不是从外部访问,则无需映射端口。

使用 docker-compose,所有定义的容器将自动添加到网络中,容器可以通过它们的名称相互访问(参见 https://docs.docker.com/compose/networking/ )。如果您的自定义“默认”网络是桥接网络,这也适用。

这意味着,您的 SMTP 容器可以通过 smtp:25 直接从其他容器访问(即它的内部端口和内部主机名,而不是您的 docker 主机的主机端口和公共(public)可路由 IP 地址) .

没有其他人能够像那样使用您的 SMTP 服务器。我认为这可能会导致收件人不接受它发送的电子邮件的问题(请参阅 https://serverfault.com/q/364473 )。 @David Maze 说无论如何使用公共(public)/官方邮件提供商可能更好。

关于email - 在容器中为您的应用程序设置 SMTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52934186/

相关文章:

php - 使用 CodeIgniter 通过 Gmail 发送电子邮件时遇到问题?

php - 隐藏或不打印来自服务器的消息

python - 通过 python 通过电子邮件发送 mysql select 语句

docker - 权限被拒绝安装现有卷(没有sudo)

email - 使用 alfresco 作为 smtp 邮件服务器

python - Try 语句运行不正确?

PHPMailer 和 SMTP : Mail never shows up when sent from remote server, 在本地机器上工作正常

iphone - iOS14 Exchange Online共享邮箱

docker - kubernetes上的 Spark :预期为HTTP 101响应,但为 '403 Forbidden'

docker - CORS 在带有 NGINX 的 Docker-Compose 堆栈中的某处失败 - 找不到它