如何解决docker-compose docker mysql ECONNREFUSED?

How to solve docker-compose docker mysql ECONNREFUSED?

我有以下docker撰写:

services:
  server:
    container_name: server
    build: 
      context: ./BE
      dockerfile: ./Dockerfile.prod
    depends_on:
      - mysql
    environment:
      MYSQL_HOST_IP: mysql
    ports:
      - 4000:4000
    links:
      - mysql
  mysql:
    image: mysql:latest
    container_name: mysqldb
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    # container_name: my_very_special_server
    ports:
      - 3307:3306
    volumes:
      - ./DbScripts/DumpTodoOnly.sql:/docker-entrypoint-initdb.d/DumpTodoOnly.sql
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_DATABASE: todo
      MYSQL_ROOT_PASSWORD: password!
      MYSQL_PASSWORD: password!
    healthcheck:
      test: "mysql -uroot -p$MYSQL_ROOT_PASSWORD content -e 'select 1'"
      interval: 1s
      retries: 120
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: dev_pma
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3307
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8183:80
  client:
    container_name: FE
    build: 
      context: ./FE
      dockerfile: ./Dockerfile.prod
    ports:
      - 3000:3000
    environment:
      - CHOKIDAR_USEPOLLING=true
    tty: true
volumes:
  db_data:

当我 运行: docker-compose up -d --build

一切构建无误。

我访问我的 php 管理员:http://localhost:8183/index.php?route=/&route=%2F

我可以看到我的两个 table 已创建:

问题:

在服务器上我有一个路由 http://localhost:4000/api/create

它基本上接受了一个 body 参数,该参数应该将一个 todo 添加到 todos table。

但是当使用邮递员时我得到:

{
    "status": "error",
    "statusCode": 500,
    "message": {
        "errno": "ECONNREFUSED",
        "code": "ECONNREFUSED",
        "syscall": "connect",
        "address": "127.0.0.1",
        "port": 3306,
        "fatal": true
    }
}

我认为 ny db image 没有及时构建,所以我在 compose 文件中添加了一个 healtcheck:

healthcheck:
  test: "mysql -uroot -p$MYSQL_ROOT_PASSWORD content -e 'select 1'"
  interval: 1s
  retries: 120

在服务器图像上:

depends_on:
        mysql:
          condition: service_healthy

但是当我想要构建撰写文件时,我得到了:

错误:服务器容器“a7916ff588af”不健康。 启动项目时遇到错误

我错过了什么?

我花了一些时间来更新这个问题。

@Phil 是正确的。我需要在 node express 中的 sql 配置中添加图像名称而不是 ip。