簡體   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