【问题标题】:Run sequelize migrates in docker compose在 docker compose 中运行 sequelize 迁移
【发布时间】:2020-04-27 02:34:58
【问题描述】:

我正在尝试使用 node 和 postgres 建立两个容器(我需要保存数据库的内容)。按照下面的代码:

Dockerfile:

FROM node:lts-alpine

RUN mkdir -p /home/node/api/node_modules && chown -R node:node /home

WORKDIR /home/node/api

COPY package.json /

USER node

RUN npm i

COPY --chown=node:node . .

EXPOSE 3000

COPY ./docker-entrypoint.sh /docker-entrypoint.sh

RUN chmod +x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

docker-entrypoint.sh:

#!/bin/sh

npx sequelize-cli db:migrate

npm run dev

好吧,这里我不知道如何运行迁移,因为在我的计算机上我只运行 "sequelize db:migrate",我在 package.json 中也有一个脚本 "migrate:dev": "NODE_ENV=development sequelize db:migrate"

例如。

还有 docker-compose.yml:

version: '3'

services:
    app-app:
        container_name: app-app
        build: '.'
        volumes:
            - .:/home/node/api
            - /home/node/api/node_modules
        depends_on:
            - postgres-app
        networks:
            - app-connect
        ports:
            - '3000:3000'

    postgres-app:
        container_name: postgres-app
        image: postgres:11
        restart: unless-stopped
        volumes:
            - postgres-app-data:/data
        environment:
            POSTGRES_DB: ${DATABASE}
            POSTGRES_USER: ${DB_USER}
            POSTGRES_PASSWORD: ${DB_PASS}
        networks:
            - app-connect

volumes:
    postgres-app-data:

networks:
    app-connect:
        driver: bridge

但迁移尚未运行。尝试运行 docker-entrypoint.sh 时出现错误:

chmod: /docker-entrypoint.sh: Operation not permitted
ERROR: Service 'app-app' failed to build: The command '/bin/sh -c chmod +x /docker-entrypoint.sh' returned a non-zero code: 1

如果我删除所有这些项目并且只直接运行 npm start 所有工作,但是当我尝试访问应用程序容器以运行迁移时,会显示错误:

docker exec -it 351 npm run migrate:dev                                                                 

> app@1.0.0 migrate:dev /home/node/api
> NODE_ENV=development sequelize db:migrate


Sequelize CLI [Node: 12.14.0, CLI: 5.5.1, ORM: 5.21.3]

Loaded configuration file "src/config/database.js".
Using environment "development".

ERROR: getaddrinfo ENOTFOUND postgres

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! app@1.0.0 migrate:dev: `NODE_ENV=development sequelize db:migrate`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the app@1.0.0 migrate:dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/node/.npm/_logs/2020-01-09T12_43_32_377Z-debug.log

我该怎么做?谢谢!

【问题讨论】:

  • 可以发一下src/config/database.js
  • 是的,它等于在 init 上创建 sequelize:require('dotenv').config(); module.exports = {开发:{用户名:process.env.DB_USER,密码:process.env.DB_PASS,数据库:process.env.DATABASE,主机:process.env.DB_HOST,端口:process.env.DB_PORT,方言: 'postgres' } };
  • 尝试将 DB_HOST 设置为 postgres-app
  • @AndréOliveira 好人!作品!我在 docker 文件中直接运行 npm start 并使用 docker exec 运行迁移。谢谢!
  • 另一个问题,我怎样才能运行所有的测试?当我运行“npm t”时,表示该端口已在使用中......

标签: javascript node.js docker docker-compose sequelize.js


【解决方案1】:

所以根据上面的 cmets,问题是 DB_HOST 设置了错误的值。

在这种情况下,DB_HOST 应该具有服务名称的值:postgres-app。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多