докер составляет последовательность сборки - PullRequest
1 голос
/ 28 мая 2019

У меня есть мультиконтейнерное приложение (Laravel + Nginx + PostgreSQL), и я использую docker compose для сборки моего приложения.
Мне нужно запустить php artisan migrate внутри моего контейнера Laravel в процессе сборки, но у меня естьпроблема - контейнер Laravel может начать сборку раньше, чем контейнер Postgres, поэтому я получил ошибку, потому что мой хост БД не готов.Как я могу установить что-то вроде "последовательность построения" в моем docker-compose.yml?

Мой текущий docker-compose.yml:

version: '3.3'
services:

  phpfpm:
    build:
      context: laravel-docker
    depends_on:
      - db
    container_name: phpfpm
    restart: always
    volumes:
      - /var/www/html/vendor/
      - ./laravel-docker:/var/www/html
    networks:
      - app-network

  db:
    image: postgres:9.6.5-alpine
    container_name: db
    restart: always
    environment:
      POSTGRES_DB: blabla
      POSTGRES_USER: blabla
      POSTGRES_PASSWORD: blabla
    volumes:
      - ./db_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - app-network

и laravel-docker/Dockerfile:

FROM php:7.3.0-fpm-alpine3.8

//...

RUN chown -R www-data:www-data /var/www/html
RUN chmod 755 -R /var/www/html && chmod -R o+w storage/

USER www-data

RUN composer install
RUN composer dump-autoload
COPY .env.example .env
// I need to migrate here when DB container will be ready

1 Ответ

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

Dockerfile не является хорошим выбором для операций миграции базы данных. Образ должен быть в состоянии быть изолированным от других контейнеров.

Миграция базы данных больше подходит для операции при загрузке, а не при сборке. Хорошим местом для этого может быть сценарий точки входа изображения или отдельная работа «init» при загрузке стека докеров - в зависимости от того, что вам удобнее.

...