Docker环境下Laravel通过Mailhog发邮件失败:主机解析错误求助
Laravel + Docker Mailhog 邮件发送失败问题解决
问题场景
在Docker环境中尝试通过Mailhog发送Laravel邮件时,出现域名解析失败错误,无法建立邮件连接。
相关配置
.env 配置
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:p5lGXZTf7OB8BwTkbRBiBxoVn0yOO06tSyP/iChZJGA= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=lara DB_USERNAME=root DB_PASSWORD=root BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DISK=local QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=mailhog MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_HOST= PUSHER_PORT=443 PUSHER_SCHEME=https PUSHER_APP_CLUSTER=mt1 VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
Docker Compose 配置片段
mailhog: image: mailhog/mailhog ports: - 1025:1025 - 8025:8025
错误信息
Connection could not be established with host "mailhog:1025": stream_socket_client(): php_network_getaddresses: getaddrinfo for mailhog failed: Temporary failure in name resolution
解决方案
确保容器处于同一网络
Docker容器之间通过主机名通信的前提是在同一个自定义网络中,默认default网络也可使用,但显式配置更清晰:- 修改Docker Compose,为Laravel应用和Mailhog添加共同网络:
version: '3' networks: app-net: driver: bridge services: # 此处添加你的Laravel应用服务(如php-fpm/nginx) laravel-app: # ... 原有配置 networks: - app-net mailhog: image: mailhog/mailhog ports: - 1025:1025 - 8025:8025 networks: - app-net - 重启容器使配置生效:
docker-compose down && docker-compose up -d
- 修改Docker Compose,为Laravel应用和Mailhog添加共同网络:
替换MAIL_HOST为可访问IP
如果暂时不想调整网络,可将.env中的MAIL_HOST改为以下任一值:- Mailhog容器的直接IP:通过
docker inspect mailhog | grep -A 2 "IPAddress"命令获取后填入 - 宿主机的Docker网关IP(通常为
172.17.0.1,不同系统可能有差异)
修改后示例:
MAIL_HOST=172.17.0.1- Mailhog容器的直接IP:通过
清理Laravel配置缓存
修改.env后必须清除配置缓存,否则Laravel会沿用旧配置:php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者salaheddine el jettioui
相关产品推荐
相关产品推荐

