Docker compose : MySQL with NodeJS "Error: connect ECONNREFUSED"

Docker compose : MySQL with NodeJS "Error: connect ECONNREFUSED"

尝试 运行 NodeJS 服务器和 MySQL 数据库 docker-compose 但无论我做什么我都无法将两者连接在一起。

这是我在控制台中得到的:

api      | Listening
api      | Connecting with {"host":"mysql","database":"bogo_plan","user":"root","port":3006}
api      | /app/index.js:24
api      |   if (err) throw err;
api      |            ^
api      | 
api      | Error: connect ECONNREFUSED 172.27.0.2:3006
api      |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16)
api      |     --------------------
api      |     at Protocol._enqueue (/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
api      |     at Protocol.handshake (/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
api      |     at Connection.connect (/app/node_modules/mysql/lib/Connection.js:116:18)
api      |     at Object.<anonymous> (/app/index.js:23:5)
api      |     at Module._compile (internal/modules/cjs/loader.js:1063:30)
api      |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
api      |     at Module.load (internal/modules/cjs/loader.js:928:32)
api      |     at Function.Module._load (internal/modules/cjs/loader.js:769:14)
api      |     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
api      |     at internal/main/run_main_module.js:17:47 {
api      |   errno: -111,
api      |   code: 'ECONNREFUSED',
api      |   syscall: 'connect',
api      |   address: '172.27.0.2',
api      |   port: 3006,
api      |   fatal: true
api      | }

这是我的 docker-compose.yml :

version: '3'
services:
  mysql:
    container_name: 'mysql'
    image: 'mysql:8.0'
    ports:
      - '3006:3006'
    volumes:
      - ./mysql/my-db:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=bogo_plan
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_ROOT_PASSWORD=
  api:
    container_name: 'api'
    build:
      dockerfile: Dockerfile.dev
      context: ./api
    links:
      - mysql:mysql
    restart:
      always
    volumes:
      - /api/node_modules
      - ./api:/api
    environment:
      - MYSQL_HOST=mysql
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_DATABASE=bogo_plan

我可以使用 mysql cli 连接到 mysql 容器并在其中做任何我想做的事。我知道我连接到正确的那个,因为当我第一次登录数据库时数据库已经创建。

我尝试了很多东西:

到这里我就没思路了

编辑: 删除了问题中一些不相关的部分,这样更容易阅读。

MySQL 使用端口号 3306,而不是 3006,就像您在 docker-compose 文件中那样,因为 在 OP 的评论中提到。

你应该mysql docker-compose 端口映射中的实例服务:

ports:
  - "3006:3306"