错误:连接 ECONNREFUSED 127.0.0.1:5432 docker migrate

Posted

技术标签:

【中文标题】错误:连接 ECONNREFUSED 127.0.0.1:5432 docker migrate【英文标题】:ERROR: connect ECONNREFUSED 127.0.0.1:5432 docker migrate 【发布时间】:2019-05-03 11:38:35 【问题描述】:

我正在尝试迁移数据,但它总是找不到我的 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

【问题讨论】:

【参考方案1】:

您应该像这样在 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

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

【讨论】:

【参考方案2】:

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

【讨论】:

你是在windows操作系统下配置的吗?【参考方案3】:

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

此问题的解决方案是使用仅在数据库启动几秒钟后启动服务器的脚本。在 https://github.com/PedroS11/node-postgres-redis-docker 你有一个例子,entry-point.sh。或者,如果你愿意,搜索“等待它 docker”,你会找到一个脚本和更多示例。

【讨论】:

我看到了 entry-point.sh 那么你能帮我在 docker 运行时如何从该文件运行脚本吗?感谢您的帮助 我告诉你有问题,在我的仓库中,我在 api 中有一个 wait-for-it.sh 文件,复制它并粘贴到你的服务器文件夹中,而不是在你的 docker-compose.yml 中替换在服务器中执行类似以下命令的命令:["./wait-for-it.sh", "db:5432", "--", "npm", "run", "db"]。并在你的 package.json "db" 上创建一个 npm 命令:"sequelize db:migrate && sequelize db:seed:all" 好的。我得到了它。谢谢你。 :D XD

以上是关于错误:连接 ECONNREFUSED 127.0.0.1:5432 docker migrate的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 Gitlab CI 上连接 ECONNREFUSED 127.0.0.1:5432

开玩笑测试通过但得到错误:最后连接 ECONNREFUSED 127.0.0.1:80

Nodejs和java套接字实现错误:连接ECONNREFUSED 127.0.0.1:8081 [重复]

Heroku + MongoLab 插件与 Node.js 应用程序的连接错误 - 错误:连接 ECONNREFUSED 127.0.0.1:27017

无法启动 WebDriverAgent:无法将命令代理到远程服务器。原始错误:错误:连接 ECONNREFUSED 127.0.0.1:8100

MongooseServerSelectionError:连接 ECONNREFUSED 127.0.0.1:27017