无法 运行 laravel 迁移 docker 撰写

Cannot run laravel migration within docker compose

对不起,如果这很明显,我对 docker 很陌生...

我只想将带有 laravel 应用程序的容器连接到 postgres 容器

我的 laravel 申请的 Dockerfile 是:

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y libpq-dev
RUN docker-php-ext-install pdo pdo_pgsql pgsql
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /app
COPY . /app
RUN composer install

CMD php artisan serve --host=0.0.0.0 --port=8181

EXPOSE 8181

这个容器没有问题 运行很好

我的 docker-compose.yml 是这样的:

version: '3'
services:
    laravel:
        container_name: app
        build:
            context: .
            dockerfile: Dockerfile
        environment:
            - DB_CONNECTION=pgsql
            - DB_HOST=localhost
            - DB_PORT=5432
            - DB_DATABASE=postgres
            - DB_USERNAME=postgres
            - DB_PASSWORD=postgres
        volumes:
            - .:/var/www/app
            - ./vendor:/var/www/app/vendor
        ports:
            - '8181:8181'
        command: bash -c "php artisan migrate"
        depends_on:
            - db
        links:
            - db
    db:
        image: postgres
        container_name: postgres_database
        restart: always
        environment:
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
            - POSTGRES_DB=postgres
        ports:
            - '5432:5432'
        volumes:
            - db:/var/lib/postgresql/data
volumes:
  db:
    driver: local

当我 运行 docker-compose up 我在 运行 迁移命令时遇到问题:我得到一个 QueryException: could not find driver (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE')

如果我删除 docker-compose 文件中的 command: bash -c "php artisan migrate" 行,一切正常,我可以使用数据库客户端连接到我的数据库

有人知道发生了什么事吗?

非常感谢!!!

文件 app/config/database.php 可能仍然引用错误的(默认)MySQL 驱动程序。
我建议在尝试 运行 迁移之前使用 sed 来编辑文件。

随着项目的发展,我经常会遇到这些小的配置问题,所以我选择安装 Laradock 来为我完成这项工作。所以强烈推荐。

https://laradock.io/getting-started/

如果在应用程序构建后迁移未 运行 成功,则可能未创建数据库,因为在 .env 文件中需要填写 Postgresql 数据库和用户凭据。 另外请尝试安装以下扩展。

docker-php-ext-install pdo_pgsql pgsql