【发布时间】:2019-11-07 19:41:12
【问题描述】:
例如,在我的 Docker 中运行查询时出现此错误
php artisan clear-compiled
In Connection.php line 664:
SQLSTATE[HY000] [2002] Connection timed out (SQL: select `id`, `name` from
`users` where `profile_is_public` = 1 and `status` = 1 order by `created_at
` desc limit 6)
连接超时错误的常见情况有哪些?我的配置可能有什么问题?也许它可能与mysql套接字有关?怎么查?
我想我输入了正确的用户名和密码。
docker-compose.yml
version: '3'
services:
web:
build: ./webserver
ports:
- "80:80"
- "443:443"
volumes:
- //docker/dockertest/webserver/app:/var/www/vhosts/app
links:
- db:db
command:
- /usr/local/bin/apache2_install_composer_dependencies.sh
db:
image: mysql:8.0
container_name: db
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d
- persistent:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
environment:
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
persistent:
Laravel .env
DB_CONNECTION=mysql
#host points to Docker container
DB_HOST=db
DB_PORT=3306
DB_DATABASE=myDb
DB_USERNAME=root
DB_PASSWORD=test
更新
像这样的简单 PHP 脚本可以工作,但 Laravel 不能(仍然是同样的错误)
$servername = "db"; $username = "root"; $password = "test"; $dbname = "myDb";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM Person";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
}
$conn->close();
【问题讨论】:
-
这本书的意义何在?
- //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d如果文件夹中有大量数据,则可能会降低卷的性能 -
@MichaelStClair 将一个小型测试数据库添加到 docker 容器中
-
这很可能是你的问题,我假设你不是在 linux 机器上工作。至少在 Mac 上,当您将主机上的目录挂载到 docker 容器中时,读/写性能会非常慢,这可能会导致您的超时。我会启动容器,然后使用
docker cp将测试数据库放入容器 -
如果是这种情况,为什么我可以在
docker-compose exec web bash中执行mysql查询而不超时?
标签: mysql laravel docker docker-compose dockerfile