2016-07-13 1 views
0

Вот мой простой сценарий, у меня есть простая Flask приложения, которые подключаются к Postgres таким образом:Как инициализировать базу данных на контейнере объема данных?

SQLALCHEMY_DATABASE_URI='postgresql://username:[email protected]:5432/myproj' 

И у меня есть простой docker-compose.yml:

version: '2' 
services: 
    postgres: 
    image: postgres:latest 
    volumes_from: 
     - data 
    environment: 
     POSTGRES_PASSWORD: secretpassword 
     POSTGRES_USER: username 
     POSTGRES_DB: myproj 
    ports: 
     - "5432:5432" 
    web: 
    build: . 
    volumes_from: 
     - app 
    ports: 
     - "5000:5000" 
    depends_on: 
     - postgres 
    data: 
     image: postgres:latest 
     volumes: 
      - /var/lib/postgresql/data 
     command: "true" 
    app: 
     build: . 
     volumes: 
      - .:/myproj 
     command: "true" 

мне нужно обед сделал самому колба скрипт, который создает таблицы для моего приложения:

export FLASK_APP='./myproj/__init__.py' 
flask createdbs 

Я поставил эти 2 операции в Dockerfile из мой сервис web, но поскольку мой сервис и сервис postgres имеют отношение depends_on, хост postgres db не доступен на этапе строительства.

Любое предложение о наилучшем способе достижения этого? Я хочу избежать хаков, я бы предпочел уважать правильный рабочий процесс Докера.

ответ

0

Один из способов сделать это использовать «команду» ключевое слово: https://docs.docker.com/compose/compose-file/#/command (смотрите также на Entrypoint ключевое слово)

web: 
    build: . 
    volumes_from: 
     - app 
    ports: 
     - "5000:5000" 
    depends_on: 
     - postgres 
    command: "export FLASK_APP='./myproj/__init__.py' && flask createdbs" 

или с помощью команды только для запуска опоки сценарий, и пусть ваш экспорт в вашем dockerfile.

Обратите внимание, что «depend_on» запускает только один контейнер перед другим, но не ждите, что ваша база данных postgres будет готова. Если вы хотите дождаться ответа postgres, вы можете использовать такие сценарии, как «wait-for-it.it postgres: 5432», которые хорошо объясняются в документе docker-compose: https://docs.docker.com/compose/startup-order/

Смежные вопросы