错误:连接ECONNREFUSED 127.0.0.1:5432 Docker迁移

时间:2018-12-01 15:38:18

标签: node.js postgresql docker docker-compose

我正在尝试迁移数据,但始终找不到我的postgreSQL。

version: '3'
services:
  server:
    build: ./server
    ports:
      - 3002:3002
    depends_on:
      - db
    environment:
      CORS_ALLOW_ORIGINS: http://localhost:8080,http://localhost:80
      PORT: 3002
      DEBUG: vuichoi*
      DEBUG_HIDE_DATE: 1
      SECRET_OR_PRIVATE_KEY: secret
      SECRET_OR_PUBLIC_KEY: secret
      DATABASE_URL: postgres://vuichoi:@db:5432/vuichoi #point the server container to the db container's IP address
      command: bash -c "sequelize db:migrate && sequelize db:seed:all"
  db:
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: vuichoi
      POSTGRES_DB: vuichoi
    image: postgres:10

config.json

{
"development": {
    "username": "vuichoi",
    "database": "vuichoi",
    "host": "localhost",
    "dialect": "postgres"
},
"test": {
    "username": "vuichoi",
    "password": "vuichoi",
    "database": "database_test",
    "host": "localhost",
    "dialect": "postgres"
},
"production": {
    "use_env_variable": "DATABASE_URL"
}

}

在docker-compose up --build之后 enter image description here

当我尝试迁移时:

enter image description here

3 个答案:

答案 0 :(得分:2)

您应该这样在docker-compose文件中为容器命名:

db:
  container_name: my_database
  ports:
    - 5432:5432
  environment:
    POSTGRES_USER: vuichoi
    POSTGRES_DB: vuichoi
  image: postgres:10
server:
  container_name: my_server

然后在您的config.json中更改主机

{
  "development": {
  "username": "vuichoi",
  "database": "vuichoi",
  "host": "my_database",
  "dialect": "postgres"
},

此外,您的数据库可以在运行迁移脚本后启动。 要解决此问题,您可以添加

server:
  container_name: my_server
  restart: always

因此,您的服务器将在第一次尝试失败后重新启动,并且迁移脚本将正常运行

答案 1 :(得分:1)

我通过将config.json中的“ localhost”替换为“ host.docker.internal”来修复,然后运行正常。问题可能是找不到我的Db容器

答案 2 :(得分:0)

问题是您同时运行服务器和数据库,并且在服务器启动时,它尝试连接到仍在启动/创建的数据库。

此问题的解决方案是使用一个脚本,该脚本仅在数据库启动后几秒钟启动服务器。在 https://github.com/PedroS11/node-postgres-redis-docker您有一个示例,entry-point.sh。或者,如果需要,搜索“ waiting it docker”,您将找到一个脚本以及更多示例。