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

Docker Swarm部署mysql/mysql-cluster时服务名无法解析问题求助

核心错误原因

MySQL Cluster 管理节点进程 ndb_mgmd 启动时会优先解析配置文件中指定的 HostName,但这个执行时机早于 Docker Swarm 内置DNS完成服务名注册的时间,同时默认创建的容器主机名和配置文件中填写的服务名不一致,最终导致解析失败。

排查步骤
  • 临时修改management1服务的启动命令为 sleep 3600 后重新部署,进入容器执行以下命令验证基础网络是否正常:
    • 执行 cat /etc/resolv.conf 确认DNS服务器为Swarm内置的 127.0.0.11
    • 执行 nslookup management1 验证服务名是否能正常解析到容器IP
    • 执行 hostname 查看容器当前主机名是否等于 management1
解决方案

方案1:显式指定容器主机名(最稳定)

在docker-compose.yml的每个服务配置块中,添加hostname字段,值和mysql-cluster.cnf中配置的HostName保持一致,修改后的服务配置示例:

services:
  management1:
    image: mysql/mysql-cluster
    command: ndb_mgmd
    hostname: management1 # 新增字段
    networks:
      - "meroex-network"
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
  ndb1:
    image: mysql/mysql-cluster
    command: ndbd
    hostname: ndb1 # 新增字段
    networks:
      - "meroex-network"
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager

  ndb2:
    image: mysql/mysql-cluster
    command: ndbd
    hostname: ndb2 # 新增字段
    networks:
      - "meroex-network"    
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager   

  mysql1:
    image: mysql/mysql-cluster
    ports:
      - "3306:3306"
    restart: always
    command: mysqld
    hostname: mysql1 # 新增字段
    depends_on:
      - "management1"
      - "ndb1"
      - "ndb2"
    networks:
      - "meroex-network"
    deploy:
      placement:
        constraints:
          - node.role == manager

修改后执行以下命令重新部署即可:

docker stack rm vossibility
# 等待10秒左右让所有旧资源清理完成
docker stack deploy --compose-file docker-compose.yml vossibility

方案2:添加启动延迟适配DNS注册时机

如果不想修改主机名配置,可以给ndb_mgmd加启动延迟,等待Swarm DNS注册完成后再启动进程,修改management1的command为:

command: sh -c "sleep 5 && ndb_mgmd"

这个方案适配性稍差,若Swarm集群负载高时可能需要调整延迟时长。

部署完成后可进入management1容器执行 ndb_mgm -e show 验证所有节点是否正常接入集群。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:57:01