NodeJS无法连接到Docker容器内的MYSQL

时间:2019-01-26 01:22:01

标签: mysql node.js docker sequelize.js

我遵循了docker-compose文件,遇到错误消息。

version: '3'
services:
  node:
    build: ./app
    environment:
      - NODE_ENV=production
      - PORT=3000
      - MYSQL_HOST=ppshein-mysql
      - MYSQL_USER=root
      - MYSQL_PASSWORD=ppshein123456
    ports:
      - "3000:3000"
    networks:
    - my-bridge-network
    depends_on:
      - "${MYSQL_HOST}"
    container_name: ppshein-api
  db:
    image: mysql:8.0.14
    environment:
      - MYSQL_ROOT_PASSWORD=ppshein123456
    networks:
    - my-bridge-network
    container_name: ppshein-mysql
networks:
  my-bridge-network:
    driver: bridge

这是mysql sequelize的配置文件,

"production": {
    "username": "root",
    "password": "ppshein123456",
    "database": "database_production",
    "host": "ppshein-mysql",
    "dialect": "mysql",
    "logging": false
}

这是NodeJS应用的Dockerfile

FROM node:9.10.1
ENV NODE_ENV=development
COPY ./ /var/www
WORKDIR /var/www/
RUN yarn install && yarn add sequelize-cli -g
EXPOSE 3000
CMD /bin/bash ./wait-for-it.sh ppshein-mysql:3306 -- npm run docker

然后,最后我遇到以下错误消息:

  

已加载的配置文件“ config / config.json”。使用环境   “生产”。周六,2019年1月26日01:03:45 GMT sequelize已弃用   现在不建议使用基于字符串的运算符。请使用基于符号   操作员以获得更好的安全性,更多信息请参见   http://docs.sequelizejs.com/manual/tutorial/querying.html#operators在   node_modules / sequelize / lib / sequelize.js:242:13

     

错误:连接ECONNREFUSED 172.21.0.2:3306

1 个答案:

答案 0 :(得分:2)

您不应在0.0.0.0上访问MySQL。

在同一网桥网络上,由Docker-compose定义的容器的主机名等于容器名,因此您的MySQL主机名是db

如果要自定义容器主机名,则可以使用网络上的别名来进行。请查看以下答案:https://stackoverflow.com/a/47264089/3429323