配置Mailpit与Laravel和Docker协作时的连接问题排查
解决Mailpit邮件连接报错:getaddrinfo failed: Temporary failure in name resolution
问题分析
报错php_network_getaddresses: getaddrinfo failed本质是域名解析失败,你的应用无法定位到Mailpit服务。结合Docker环境,核心问题集中在容器网络配置和邮件服务地址配置不匹配。
解决方案
1. 修正Docker Compose配置
移除Mailpit服务中的hostname: localhost配置,Docker Compose默认会以服务名(mailpit)作为容器的主机名,方便同网络内的其他容器直接访问:
version: "3.9" services: mailpit: image: axllent/mailpit container_name: mailpit restart: always volumes: - ./data:/data ports: - 8025:8025 - 1025:1025 environment: MP_MAX_MESSAGES: 5000 MP_DATA_FILE: /data/mailpit.db MP_SMTP_AUTH_ACCEPT_ANY: 1 MP_SMTP_AUTH_ALLOW_INSECURE: 1
若你的应用也运行在Docker容器中,需将其加入同一个Docker Compose配置文件,确保两者处于同一网络。
2. 调整邮件环境变量
根据应用运行环境选择对应配置:
- 应用在Docker容器内:使用Mailpit的服务名作为主机地址
MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" - 应用在宿主机(非Docker):使用本地回环地址即可
MAIL_MAILER=smtp MAIL_HOST=127.0.0.1 MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}"
3. 检查容器网络连通性
若应用和Mailpit不在同一Docker网络,手动将应用容器加入Mailpit所在网络:
- 查看Mailpit所在网络:
docker inspect mailpit | grep Networks - 将应用容器加入该网络:
docker network connect [网络名称] [应用容器名称]
4. 清理无效配置
删除你创建的Dockerfile,该文件写法错误(RUN指令无法直接执行docker run参数),Mailpit的管理完全可以通过Docker Compose完成。
5. 验证操作
- 重启Mailpit服务:
docker-compose down && docker-compose up -d - 测试邮件发送功能,同时访问
http://localhost:8025查看Mailpit Web界面是否收到邮件。
内容的提问来源于stack exchange,提问作者tech leadz
相关产品推荐
相关产品推荐

