You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm环境下phpMyAdmin登录MySQL报域名解析失败问题咨询

Docker Swarm下phpMyAdmin连接MySQL域名解析失败排查解决

1 优先修正docker-compose.yml语法错误

你的配置存在多处致命语法问题,是导致服务发现失效的核心原因:

  • 根节点关键字错误:你使用的service节点名应为services,Swarm无法识别错误节点下的服务定义
  • 缩进错误:deploy下的placement、resources、restart_policy、update_config等子项缩进全部不符合YAML规范,会导致配置不生效,服务无法正常注册到Swarm DNS
  • 层级错误:networks根节点被错误写在services的子级下,应该和services、secrets、volumes平级

修正后的核心结构参考:

version: "3.9"
services:
  db:
    # 原有db配置,注意所有子项缩进统一
  phpmyadmin:
    # 原有phpmyadmin配置,注意所有子项缩进统一
networks:
  front-tier:
    driver: overlay
  back-tier:
    driver: overlay
volumes:
  alpine-db_backup:
  alpine-mysql_logs:
  alpine-mysql_cnf:
secrets:
  mysql_root_password:
    external: true
  mysql_database:
    external: true
  mysql_user:
    external: true
  mysql_password:
    external: true

2 验证Swarm服务发现状态

  • 进入任意phpMyAdmin容器测试DNS解析:
    docker exec -it <phpmyadmin容器ID> nslookup db
    
    如果返回正常的db服务虚拟IP,说明服务发现正常,否则继续排查
  • 检查overlay网络关联状态:
    docker network inspect back-tier
    
    确认db和phpMyAdmin的所有副本容器都在该网络的Containers列表中
  • 检查所有Swarm节点的防火墙规则,放行53端口UDP流量,避免拦截Docker内置DNS(127.0.0.11)的解析请求

3 修正MySQL有状态服务配置

MySQL属于有状态服务,直接部署3个无同步的副本会出现数据不一致,同时Swarm DNS轮询会将请求分发到不同副本导致登录异常,建议先将deploy.replicas改为1,验证连通性正常后再配置MySQL主从集群。

4 验证最终连通性

修正配置后重新部署栈:

docker stack deploy -c docker-compose.yml <你的栈名称>

部署完成后进入phpMyAdmin容器测试端口连通:

docker exec -it <phpmyadmin容器ID> telnet db 3306

连通正常后即可正常访问phpMyAdmin登录MySQL。

内容的提问来源于stack exchange,提问作者user11766958

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:15:01