【发布时间】:2019-05-28 15:45:38
【问题描述】:
我有一个多容器应用程序 (Laravel+Nginx+PostgreSQL),我使用 docker compose 来构建我的应用程序。
我需要在构建过程中在我的 Laravel 容器中运行 php artisan migrate,但我有一个问题 - 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
【问题讨论】:
-
你好,看看你的配置,'db'服务应该先开始运行....是这样的吗?
-
所有构建步骤都可以在任何容器运行之前发生,并且不会连接到 Docker Compose 为您创建的 Docker 内部网络。除此之外,您不能从 Dockerfile 运行数据库迁移。
-
(另外请记住,您可以删除并重新创建数据库容器,然后基于相同的镜像重新运行应用程序容器;或者将构建的镜像导出到另一个系统。)
标签: laravel docker docker-compose