我在 Docker 中运行 Laravel 5.5/Postgres 应用程序时遇到问题。我在日志中看到此错误:
找不到驱动程序 {"exception":"[object] (Doctrine\DBAL\Driver\PDOException
通常要修复此错误,我必须在 ubuntu 的控制台中运行:
composer require doctrine/dbal
Run Code Online (Sandbox Code Playgroud)
我在文件docker-compose.yml 中有:
...
lprods_composer:
image: composer:1.6
container_name: lprods_composer_container
volumes:
- ${APP_PATH_HOST}:${APP_PTH_CONTAINER}
working_dir: ${APP_PTH_CONTAINER}
command: composer install --ignore-platform-reqs
Run Code Online (Sandbox Code Playgroud)
用什么方法解救它?我想我必须在我的 docker-compose.yml 文件中设置这个选项?
修改后的块 #2
我试图解决这个问题,如下:在composer.json我在项目中添加了"doctrine/dbal": "~2.5"声明"require",现在这个文件是:
composer require doctrine/dbal
Run Code Online (Sandbox Code Playgroud)
我重建了应用程序,清除了缓存,但运行该应用程序时,我在日志文件中遇到了错误:
[2018-11-01 12:40:09] local.ERROR: 找不到驱动程序 {"exception":"[object] (Doctrine\DBAL\Driver\PDOException(code: 0):
在 /var/www/html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:47, PDOException(code: 0): 找不到驱动程序:在 /var/www/html 找不到驱动程序/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43) [stacktrace]
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(64): Doctrine\DBAL\Driver\PDOConnection->__construct('pgsql:host=127... .', 'postgres', '1', 数组)
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(43): Illuminate\Database\Connectors\Connector->createPdoConnection('pgsql:host=127... .', 'postgres', '1', 数组)
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php(33): Illuminate\Database\Connectors\Connector->createConnection('pgsql:host=127... .', 数组, 数组)
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(183): Illuminate\Database\Connectors\PostgresConnector->connect(Array)
#4 [内部函数]:Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}() ...
1) 我的声明是否无效?
2)我试图在我的容器盒中运行,但得到:
# composer require doctrine/dbal
bash: composer: command not found
Run Code Online (Sandbox Code Playgroud)
我想在我的容器盒中我可以尝试安装 composer ,但这是正确的方法吗?
你有什么建议?
MODIFIED BLOCK #3 我试着按照你的步骤和 web/Dockerfile.yml 文件中的内容
FROM composer:1.7
RUN apk --no-cache add postgresql-dev && docker-php-ext-install pgsql pdo_pgsql
Run Code Online (Sandbox Code Playgroud)
我设法成功编译:
$ docker-compose up -d --build
Creating network "lprods_docker_default" with the default driver
Building lprods_app
Step 1/2 : FROM composer:1.7
---> 3f6a33c5e9d9
Step 2/2 : RUN apk --no-cache add postgresql-dev && docker-php-ext-install pgsql pdo_pgsql
... /* LONG OUTPUT */
(21/23) Purging mpfr3 (3.1.5-r1)
(22/23) Purging isl (0.18-r0)
(23/23) Purging gmp (6.1.2-r1)
Executing busybox-1.28.4-r1.trigger
OK: 120 MiB in 66 packages
Removing intermediate container 37d149da2e44
---> d3029f0a2f29
Successfully built d3029f0a2f29
Successfully tagged lprods_docker_lprods_app:latest
Creating lprods_docker_lprods_app_1 ... done
Creating lprods_docker_lprods_db_1 ... done
Creating lprods_docker_lprods_composer_1 ... done
Creating lprods_docker_lprods_adminer_1 ... done
Run Code Online (Sandbox Code Playgroud)
但接下来我没有进入框:
$ docker-compose exec lprods_app bash
ERROR: No container found for lprods_app_1
$ docker-compose exec lprods_app_1 bash
ERROR: No such service: lprods_app_1
$ docker-compose exec lprods_docker_lprods_app_1 bash
ERROR: No such service: lprods_docker_lprods_app_1
$ docker-compose exec lprods_docker_lprods_app bash
ERROR: No such service: lprods_docker_lprods_app
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lprods_docker_lprods_app latest d3029f0a2f29 5 minutes ago 180MB
<none> <none> 3c5cdf1cd86d About an hour ago 388MB
composer 1.7 3f6a33c5e9d9 7 days ago 156MB
votes_docker_votes_app latest cdfca8c44268 7 days ago 413MB
adminer latest e07e38f6e446 2 weeks ago 81.6MB
mysql 5.6.41 085b9b6ec8a9 3 weeks ago 256MB
php 7.1-apache 93e6fb4b13e1 3 weeks ago 369MB
php 7.2-apache cf1a377ba77f 3 weeks ago 377MB
composer 1.6 eea351f3627d 3 weeks ago 155MB
postgres 9.6.10-alpine 5433943ddb9f 8 weeks ago 38.6MB
hello-world latest e38bc07ac18e 7 months ago 1.85kB
composer/composer latest 5afb0951f2a4 2 years ago 636MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f79ebc93d62 adminer "entrypoint.sh docke…" 6 minutes ago Up 6 minutes 0.0.0.0:8083->8080/tcp lprods_docker_lprods_adminer_1
caed5c2ae860 postgres:9.6.10-alpine "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:5433->5432/tcp lprods_docker_lprods_db_1
2f73a600b999 adminer "entrypoint.sh docke…" 7 days ago Up 2 hours 0.0.0.0:8082->8080/tcp votes_docker_adminer_1
52ea479b8791 mysql:5.6.41 "docker-entrypoint.s…" 7 days ago Restarting (1) 4 seconds ago votes_docker_db_1
Run Code Online (Sandbox Code Playgroud)
为什么出现错误以及我必须使用哪个容器名称?
谢谢!
作曲家映像不\xe2\x80\x99t 运送pgsql。
这可以通过列出编译的模块来验证。
\n\ndocker-compose exec service php -m\nRun Code Online (Sandbox Code Playgroud)\n\n在输出到的编译模块列表中stderr,\npgsql和pdo_pgsql应该丢失。
您可能会在 Docker 注册表中找到一个映像,该映像附带了 Composer、带有 pgsql 和 pdo_pgsql 扩展的 php,甚至 Laravel(请验证它是否来自可信来源)。
\n\n现在,如果您想继续composer作为基础图像。本答案的其余部分提供了相应的步骤。
虽然您可以在正在运行的容器中执行 bash 会话并\n安装所需的扩展;此更改仅在该容器实例的生命周期内持续存在。
\n\n我建议采用更持久的配置,其中包括为服务构建\n映像。在此 Dockerfile 配置中构建镜像;所需的扩展已安装。
\n\n请注意,在以下代码示例中,您应该替换为您的服务的名称,例如 lprods_composer
.Dockerfile
\n\nFROM composer:1.7\n\nRUN apk --no-cache add postgresql-dev && docker-php-ext-install pgsql pdo_pgsql\nRun Code Online (Sandbox Code Playgroud)\n\n这<service>.Dockerfile可以在服务定义中使用docker-compose.yaml。
<service>:\n build: \n context: ./\n dockerfile: <service>.Dockerfile\nRun Code Online (Sandbox Code Playgroud)\n\n另请记住配置用于连接 Postgres 数据库的连接参数。\n这可以在以下任何一个中提供environment:env_file中提供。
通过在 Tinker 中运行测试查询来测试您的配置是否成功
\n\n启动修补程序 REPL
\n\ndocker-compose exec service php artisan tinker\nRun Code Online (Sandbox Code Playgroud)\n\n然后在REPL中执行这个查询
\n\nDB::connection()->query()->selectRaw("version();")->get()\nRun Code Online (Sandbox Code Playgroud)\n\n成功的配置应该输出正在运行的 postgres 的版本。
\n| 归档时间: |
|
| 查看次数: |
9316 次 |
| 最近记录: |