【问题标题】:ERROR: connect ECONNREFUSED 127.0.0.1:5432 docker migrate错误:连接 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

【问题讨论】:

    标签: node.js postgresql docker docker-compose


    【解决方案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
      猜你喜欢
      • 1970-01-01
      • 2021-02-17
      • 2021-07-19
      • 2022-07-22
      • 2022-06-28
      • 2022-08-21
      • 2021-12-22
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多