Py学习  »  docker

用docker compose psql实现knex迁移

Christian • 4 年前 • 663 次点击  

在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"

这是我的档案

FROM node:10.14.0

WORKDIR /user/src/server

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48504
 
663 次点击  
文章 [ 2 ]  |  最新文章 4 年前
michalhosna
Reply   •   1 楼
michalhosna    5 年前

简单地添加 depends_on 到服务器服务应该做到这一点。

services:
    server:
        depends_on:
            - postgres
        ...

这将导致docker compose在服务器容器之前启动postgres容器。不过,它不会等待Postgres准备就绪。在这种情况下,这应该不是问题,因为postgres启动非常快。

如果你想要更坚固的东西,或者 取决于 不起作用,您可以将入口点包装脚本添加到容器中。见 https://docs.docker.com/compose/startup-order/ ,您可以从中了解更多信息也有指向工具的链接,因此您不必从头开始编写自己的脚本。

Gabriel Ezenwankwo
Reply   •   2 楼
Gabriel Ezenwankwo    4 年前

在docker-compose.yml文件中,使用sh(bash)作为要在其中运行命令的包含环境上下文。即SH-C‘NPM运行数据库’ 你的docker compose文件现在是 其次,使用依赖步骤等待数据库启动

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