无法 运行 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 来为我完成这项工作。所以强烈推荐。
如果在应用程序构建后迁移未 运行 成功,则可能未创建数据库,因为在 .env 文件中需要填写 Postgresql 数据库和用户凭据。
另外请尝试安装以下扩展。
docker-php-ext-install pdo_pgsql pgsql
对不起,如果这很明显,我对 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 来为我完成这项工作。所以强烈推荐。
如果在应用程序构建后迁移未 运行 成功,则可能未创建数据库,因为在 .env 文件中需要填写 Postgresql 数据库和用户凭据。 另外请尝试安装以下扩展。
docker-php-ext-install pdo_pgsql pgsql