【问题标题】:Error getaddrinfo ENOTFOUND db when running sequelize migrations运行 sequelize 迁移时出错 getaddrinfo ENOTFOUND db
【发布时间】:2020-06-13 19:20:19
【问题描述】:

我正在使用 docker-compose,当我尝试在控制台中运行 yarn sequelize db:migrate 时出现以下错误:

“加载配置文件“src/config/database.js”。 错误:getaddrinfo ENOTFOUND db"

一切正常,但我无法运行迁移。

Dockerfile

FROM node:alpine

WORKDIR /usr/app
COPY package.json yarn.lock ./

RUN yarn

COPY . .

EXPOSE 3000
CMD ["yarn", "dev"]

Docker-compose.yml

version: '3'

services:
  api:
    container_name: api
    build: .
    ports:
      - '3000:3000'
    command: yarn dev
    volumes:
      - .:/usr/app
    links:
      - db

  db:
    container_name: db
    image: mysql:5.7
    volumes:
      - ./data:/mysql/db
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: be_db
      MYSQL_USER: root
      MYSQL_PASSWORD: password

.env

# Database Variables
DB_HOST=db
DB_USER=root
DB_PASS=password
DB_NAME=be_db
DB_PORT:3306

/src/config/database.js

require('dotenv').config();

module.exports = {
  dialect: 'mysql',
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
  define: {
    timestamps: false,
    underscored: true,
    underscoredAll: true,
  },
};

OBS:如果我将DB_HOST=db 切换到DB_HOST=localhost,我可以运行我的迁移,但是它们,我的容器会弹出这个错误:

code: 'ECONNREFUSED',
api    |     syscall: 'connect',
api    |     address: '127.0.0.1',
api    |     port: 3306,
api    |     fatal: true

【问题讨论】:

  • 你有没有设法解决这个问题?我不断收到相同的错误消息。

标签: javascript node.js docker docker-compose


【解决方案1】:

编辑

好的,我只需要将端口和主机分成单独的字段:

"development": {
    "username": "postgres",
    "password": "postgres",
    "database": "postgres",
    "host": "localhost",
    "port": "5434",
    "dialect": "postgres"
  },

docker-composesequelize-cli 也有同样的问题

  node:
    build:
      context: ./node
      target: dev
    volumes:
      - ./node/src:/app/src
      - ./node/private:/app/private
    ports:
      - 3111:3000
    command: npm run dev
    environment:
      - NODE_ENV=development
    env_file:
      - ./node/.env
    depends_on:
      - db

  db:
    image: postgres:12-alpine
    ports:
      - 5434:5432
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
  "development": {
    "username": "postgres",
    "password": "postgres",
    "database": "postgres",
    "host": "localhost:5434",
    "dialect": "postgres"
  }

当我运行❯ npx sequelize-cli db:migrate

我收到以下错误 :

Sequelize CLI [Node: 15.2.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config/config.json".
Using environment "development".

ERROR: getaddrinfo ENOTFOUND localhost:5434

它可以与以下命令一起使用,它更像是一种解决方法

❯ npx sequelize-cli db:migrate --url 'postgres://postgres:postgres@localhost:5434/postgres'

Sequelize CLI [Node: 15.2.1, CLI: 6.2.0, ORM: 6.3.5]

Parsed url postgres://postgres:*****@localhost:5434/postgres
No migrations were executed, database schema was already up to date.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2018-03-04
    • 2017-10-16
    • 2020-05-01
    • 2018-03-03
    • 2013-09-28
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多