繁体   English   中英

如何解决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

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

在此处输入图像描述

问题:

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

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

但是当使用 postman 我得到:

{
    "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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM