【问题标题】:Using sequelize-cli with docker-compose使用 sequelize-cli 和 docker-compose
【发布时间】:2020-10-23 13:46:15
【问题描述】:

我开始使用 Docker,我有一些关于使用 nodejs、sequelize-cli 和 postgres 构建项目的问题。

如何在容器内执行 npx sequelize-cli db:migrate

我的 Dockerfile:

FROM node:alpine
 
WORKDIR /app
 
COPY package*.json ./
 
RUN npm install
 
COPY . .
 
EXPOSE 3000
 
CMD ["npm", "run", "dev"]

还有我的 docker-compose:

    version: '3'
    volumes:
      data:
    services:
      db:
        image: postgres:9.6
        env_file: .env
        volumes:
          - data:/var/lib/postgres/data
        environment:
          - POSTGRES_USER=$DB_USE
          - POSTGRES_PASSWORD=$DB_PASSWORD
          - POSTGRES_DB=$DB_NAME
      app:
        build:
          context: .
          dockerfile: Dockerfile
        volumes: 
          - /app/node_modules
          - .:/app

谢谢大家。

【问题讨论】:

  • 你试过`docker exec {ContainerNameOrHash} {command you want to run inside} 吗?
  • 我改变了 Dockerfile 来运行一个带有命令的入口点来使数据库迁移并运行它

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


【解决方案1】:

您可以在 Dockerfile 中添加:

RUN npm install -g sequelize-cli

然后docker exec app sequelize db:migrate --env production

【讨论】:

    【解决方案2】:

    您需要添加一个 entrypoint.sh 来运行 npm 命令,如下所示:

    # docker-compose.yml
    
    version: '3'
    services:
      app:
        entrypoint: ["/bin/bash", "./entrypoint.sh"]
        image: node:10.12.0
        ports:
          - "3000:3000"
    

    并在你的 package.json 中使用 sequelize-cli:

    # entrypoint.sh
    
    npm install
    npx sequelize-cli db:migrate
    

    【讨论】:

      【解决方案3】:

      只需运行docker-compose run --rm app npx sequelize-cli db:migrate

      或者...如果您的服务已经在运行,您可以简单地登录到容器 (docker-compose exec app bash) 并在正在运行的容器中运行命令 (npx sequelize-cli db:migrate)

      【讨论】:

      • 非常感谢。你救了我的命:)
      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2016-05-26
      • 2020-04-27
      • 1970-01-01
      • 2019-11-04
      • 2016-08-06
      • 2020-06-04
      相关资源
      最近更新 更多