php - 问题配置 Docker + Laravel + Mariadb 以避免:SQLSTATE[HY000] [2002] Invalid argument
问题描述
我正在配置我的 laravel 应用程序以在 docker 容器中运行;我已经在 php7.4-apache docker 镜像之上成功配置了 laravel 端,并且我已经为数据库单独配置了 Mariadb10.3 镜像。我已经解决了许多连接问题,最终将其归结为以下错误:
SQLSTATE[HY000] [2002] Invalid argument (SQL: select * from information_schema.tables where table_schema = laravel_db and table_name = migrations and table_type = 'BASE TABLE')
运行 php artisan migrate 时会出现上面的特定错误实例,但我在其他两个地方也看到相同的错误:使用 php artisan tinker 并尝试对我已验证存在的表进行基本查询时,以及运行查询时我的 laravel 应用程序(通过访问测试服务器上的站点触发)。错误重现如下:
\DB::table('users')->get();
Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [2002] Invalid argument (SQL: select * from `users`)'
并从码头日志:
PDOException(code: 2002): SQLSTATE[HY000] [2002] Invalid argument at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
我通过 SO 找到的关于此特定错误的唯一信息来自以下两个帖子: SO#1 SO#2
两者都声明您需要“指定 TCP/IP (1),或告诉 MySQL 您的 Unix 套接字在哪里 (2)”,但是,我正在使用 docker 并通过 docker 容器名称引用我的数据库,如我的 . .env 文件:
DB_CONNECTION=mysql
DB_HOST=db
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=<MY_PASSWORD>
DB_HOST=3333
所以我的问题是:如何在使用 docker 时绕过这个错误?我需要在 .env 文件中引用 docker 容器,以便 docker 方面的工作,所以我无法实施 SO 的建议。我还在 SO 之外进行了广泛的搜索(查看 Mariadb 文档以获取错误文档并广泛搜索)但无济于事。
我的 docker-compose 文件在这里,以防需要:
version: "2.2"
services:
app:
image: php:7.4-apache
ports:
- "8060:80"
tty: true
restart: unless-stopped
working_dir: /var/www/html
container_name: app
build:
context: .
dockerfile: app_dockerfile
networks:
- app-network
db:
image: mariadb:10.3
container_name: db
restart: unless-stopped
tty: true
environment:
MYSQL_ROOT_PASSWORD: <MY_PASSWORD>
MYSQL_DATABASE: laravel_db
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- app-network
volumes:
- dbdata:/var/lib/mysql/docker_db/
build:
context: .
dockerfile: db_dockerfile
ports:
- "3333:3306"
networks:
app-network:
driver: bridge
volumes:
dbdata:
driver: local
谢谢大家,我真的很感激。
解决方案
可能是您的 .env 文件中的主机错误?您是否尝试过通过 table plus 或类似的客户端连接到数据库?
推荐阅读
- android - 位图解码字节 = BitmapFactory.decodeByteArray 始终为空
- docker - 无法从 docker 实例连接到本地 MQTT 服务器(在 Windows 10 上运行)
- laravel - Laravel 通过关系查询
- firebase - 我可以在没有方法 add 的情况下从颤振生成 Doc id 到 firebase 吗?
- python - 更新 json 文件中的列表并使用 Python 保持相同的缩进
- asp.net-mvc - 扩展 AspNetCore 视图发现
- c# - 从泛型 T 获取属性类型而不使用反射
- r - UseMethod(“rescale”)中的错误:没有适用于“rescale”的适用方法应用于“c('haven_labelled','vctrs_vctr','double')”类的对象
- r - 将数字舍入到非零值
- java - 没有通知的屏幕录像机android