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

Docker Compose部署Directus连接MySQL容器出现ECONNREFUSED错误的排查求助

Docker Compose部署Directus连接MySQL容器出现ECONNREFUSED错误的排查求助

大家好,我最近在用Docker Compose部署Directus的时候遇到了一个棘手的问题——Directus容器始终无法连接到MySQL容器,一直报连接被拒绝的错误,折腾了好几种配置都没解决,想请大家帮忙看看问题出在哪🥺

我的配置文件

docker-compose.yml

version: "3"

services:
  cx_cache:
    container_name: ${APP_NAME}_cache
    image: redis:7.2.2-alpine
    networks:
      - ${APP_NAME}_directus

  cx_mysql:
    container_name: ${APP_NAME}_mysql
    image: mysql:8.2
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    expose:
      - 3306
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
      MYSQL_HOST: ${MYSQL_HOST}
      MYSQL_DATABASE: ${APP_NAME}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_TCP_PORT: 3306

  directus:
    container_name: ${APP_NAME}_directus
    build:
      dockerfile: "Dockerfile"
    ports:
      - 8055:8055
    volumes:
      - ./uploads:/directus/uploads
      - ./extensions:/directus/extensions
    networks:
      - ${APP_NAME}_directus
    depends_on:
      - ${APP_NAME}_cache
      - ${APP_NAME}_mysql
    environment:
      HOST: 0.0.0.0
      PORT: 8055
      KEY: "${APP_KEY}"
      SECRET: "${APP_SECRET}"
      DB_CLIENT: "mysql"
      DB_HOST: "localhost"
      DB_PORT: "3306"
      DB_DATABASE: "${APP_NAME}"
      DB_USER: "${MYSQL_USER}"
      DB_PASSWORD: "${MYSQL_PASSWORD}"
      DB_EXCLUDE_TABLES: "spatial_ref_sys,sysdiagrams"
      CACHE_ENABLED: "true"
      CACHE_STORE: "redis"
      CACHE_REDIS: "redis://${APP_NAME}_cache:6379"
      ADMIN_EMAIL: "mondo+${APP_NAME}@$(APP_EMAIL_DOMAIN)"
      ADMIN_PASSWORD: "${APP_ADMIN_PASSWORD}"
      ROBOTS_TXT: "User-agent: *\nDisallow: /"
      LOG_LEVEL: "debug"
      LOG_STYLE: "pretty"
      TELEMETRY: "false"
      QUERY_LIMIT_MAX: -1

networks:
  cx_directus:

.env文件

APP_NAME=cx
APP_KEY=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
APP_SECRET=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
APP_ADMIN_PASSWORD=XXXX
APP_EMAIL_DOMAIN=myDomain.com
MYSQL_ROOT_PASSWORD=XXXXXXXXXX
MYSQL_ROOT_HOST=127.0.0.1
MYSQL_HOST=*
MYSQL_DATABASE=cx
MYSQL_USER=directus
MYSQL_PASSWORD=XXXXXXX

问题现象

当我运行docker-compose up后,Redis和MySQL容器都能正常启动,但Directus容器启动失败,一直报以下错误:

cx_directus  | node:internal/process/promises:288
cx_directus  |             triggerUncaughtException(err, true /* fromPromise */);
cx_directus  |             ^
cx_directus  |
cx_directus  | Error: connect ECONNREFUSED 127.0.0.1:3306
cx_directus  |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16)
cx_directus  |     --------------------
cx_directus  |     at Protocol._enqueue (/directus/node_modules/.pnpm/mysql@2.18.1/node_modules/mysql/lib/protocol/Protocol.js:144:48)
cx_directus  |     at Protocol.handshake (/directus/node_modules/.pnpm/mysql@2.18.1/node_modules/mysql/lib/protocol/Protocol.js:51:23)
cx_directus  |     at Connection.connect (/directus/node_modules/.pnpm/mysql@2.18.1/node_modules/mysql/lib/Connection.js:116:18)
cx_directus  |     at /directus/node_modules/.pnpm/knex@2.4.2_mysql@2.18.1_pg@8.11.0_sqlite3@5.1.6_tedious@16.1.0/node_modules/knex/lib/dialects/mysql/index.js:66:18
cx_directus  |     at new Promise (<anonymous>)
cx_directus  |     at Client_MySQL.acquireRawConnection (/directus/node_modules/.pnpm/knex@2.4.2_mysql@2.18.1_pg@8.11.0_sqlite3@5.1.6_tedious@16.1.0/node_modules/knex/lib/dialects/mysql/index.js:61:12)
cx_directus  |     at create (/directus/node_modules/.pnpm/knex@2.4.2_mysql@2.18.1_pg@8.11.0_sqlite3@5.1.6_tedious@16.1.0/node_modules/knex/lib/client.js:254:39) {
cx_directus  |   errno: -111,
cx_directus  |   code: 'ECONNREFUSED',
cx_directus  |   syscall: 'connect',
cx_directus  |   address: '127.0.0.1',
cx_directus  |   port: 3306,
cx_directus  |   fatal: true
cx_directus  | }
cx_directus  |
cx_directus  | Node.js v18.18.2
cx_directus exited with code 1

已经做的排查

  • 尝试过修改MYSQL_HOST和MYSQL_ROOT_HOST的值,包括*、%、localhost、0.0.0.0、127.0.0.1,但都没有解决问题
  • 已经验证MySQL容器是正常运行的,通过以下命令进入容器后,能成功用directus用户登录MySQL:

docker exec -it cx_mysql bash
bash-4.4# mysql -u directus -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
...(省略后续登录成功的输出)

现在我实在找不到问题所在了,感觉肯定是某个细节没注意到,有没有大佬能指点一下下一步该怎么排查?太头疼了😩

备注:内容来源于stack exchange,提问作者mondo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:18:02