Миграция Knex с помощью Docker Compose Psql - PullRequest
0 голосов
/ 03 декабря 2018

У меня проблема с миграцией с использованием Knex js внутри моего контейнера docker-compose.проблема в том, что npm run db (knex migrate: откат && knex migrate: latest && knex seed: run) будет запускаться непосредственно перед созданием базы данных.Можно ли сказать, что я хотел бы запустить npm run db только после создания базы данных?

ПРИМЕЧАНИЕ: если я это сделаю, команды npm на док-терминале после его сборки все работает отлично.просто fyi

вот мой 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"]

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

в файле docker-compose.yml, используя sh (bash) для контекста среды, в которой будет выполняться ваша команда. Т.е.sh -c 'npm run db' ваш файл docker-compose теперь будет во-вторых, используйте шаг depen_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
0 голосов
/ 04 декабря 2018

Простое добавление depends_on к службе сервера должно помочь в этом.

services:
    server:
        depends_on:
            - postgres
        ...

Это заставит docker-compose запустить контейнер postgres перед контейнером сервера.Однако он не будет ждать, когда Postgres будет готов.В этом случае это не должно быть проблемой, потому что postgres запускается очень быстро.

Если вы хотите что-то более твердое, или depends_on не помогает, вы можете добавить скрипт переноса точки входа в свой контейнер.См. https://docs.docker.com/compose/startup-order/,, где вы можете прочитать больше об этом.Также есть ссылки на инструменты, поэтому вам не нужно писать собственный скрипт с нуля.

...