首页 > 解决方案 > 使用 Docker Compose Psql 进行 Knex 迁移

问题描述

我在 docker-compose 容器中使用 Knex js 进行迁移时遇到问题。问题是 npm run db (knex migrate:rollback && knex migrate:latest && knex seed:run) 甚至会在创建数据库之前运行。反正有没有说我只想在创建数据库后运行 npm run db ?

注意:如果我在构建后在 docker 终端上执行此 npm 命令,则一切正常。仅供参考

这是我的 docker-compose.yml

version: '3.6'

services:
  #Backend api
  server:
    container_name: server
    build: ./
    command: npm run db
    working_dir: /user/src/server
    ports:
      - "5000:5000"
    volumes:
      - ./:/user/src/server
    environment:
      POSTGRES_URI: postgres://test:test@192.168.99.100:5432/interapp
    links:
      - postgres

  # PostgreSQL database
  postgres:
    environment:
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
      POSTGRES_DB: interapp
      POSTGRES_HOST: postgres
    image: postgres
    ports:
      - "5432:5432"

这是我的 Dockerfile

FROM node:10.14.0

WORKDIR /user/src/server

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]

标签: postgresqldockerdocker-composeknex.js

解决方案


在 docker-compose.yml 文件上,使用 sh (bash) 作为包含的环境上下文,以便您的命令在其中运行。即。sh -c 'npm run db' 你的 docker-compose 文件现在是第二个,使用 depends_on 步骤等待数据库启动

services:
  #Backend api
    server:
    container_name: server
    build: ./
    command: sh -c 'npm run db'
    working_dir: /user/src/server
  depends_on:
    -postgres
  ports:
    - "5000:5000"
  volumes:
    - ./:/user/src/server
  environment:
    POSTGRES_URI: postgres://test:test@192.168.99.100:5432/interapp
  links:
    - postgres

推荐阅读