TCPConnectWrap.afterConnect - 节点在 docker compose 中时无法从 mysql 获取数据

nab*_*y27 5 mysql node.js docker docker-compose

我正在尝试通过 dokcer-compose 将节点与 mysql 连接。我可以使用工作台访问 mysql,但是当我尝试连接节点时出现错误:

\n\n
Error: connect ECONNREFUSED 127.0.0.1:3306\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 at TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1054: 14))\n
Run Code Online (Sandbox Code Playgroud)\n\n

有谁知道发生了什么事吗?

\n\n

docker-compose.yml

\n\n
version: \'3\'\n\nservices:\n\n  #App Service\n  app:\n    image: "node:alpine"\n    container_name: cms-node\n    restart: unless-stopped\n    tty: true\n    working_dir: /app\n    environment:\n      - NODE_ENV=production\n    ports:\n      - 1234:1234\n    volumes:\n      - ./:/app\n    links:\n      - db\n    depends_on:\n      - db\n\n  #Mysql Service\n  db:\n    image: mysql:latest\n    container_name: cms-mysql\n    restart: unless-stopped\n    # command: --default-authentication-plugin=mysql_native_password\n    environment:\n      MYSQL_DATABASE: CMS\n      MYSQL_USER: root\n      MYSQL_PASSWORD: root\n      MYSQL_ROOT_PASSWORD: root\n    ports:\n      - 3306:3306\n
Run Code Online (Sandbox Code Playgroud)\n\n

节点创建连接

\n\n
const db: Connection = mysql.createConnection({\n    host: \'localhost\',\n    user: \'root\',\n    password: \'root\',\n    database: \'CMS\',\n});\n\nexport default db;\n
Run Code Online (Sandbox Code Playgroud)\n\n

节点尝试连接

\n\n
db.connect((err) => {\n            if (err) {\n                throw err;\n            }\n            console.log(\'Connected!\');\n        });\n
Run Code Online (Sandbox Code Playgroud)\n

Ram*_*rar 6

您应该使用链接名称(默认情况下,链接服务的名称)作为要连接的主机名。有关详细信息,请参阅docker-compose.yml文档。

所以只需使用host: 'db'而不是host: 'localhost'