gpt4 book ai didi

php - Docker 无法使用 PHP 连接到 mariadb

转载 作者:可可西里 更新时间:2023-11-01 07:34:08 24 4
gpt4 key购买 nike

我是 Docker 的新手,一直在尝试弄清楚如何使用 PHP 连接到我的 MariaDB 容器,但没有成功。

我尝试在 stackoverflow 和 google 上搜索,但找不到任何有用的信息,所以我希望你们能帮助我。

奇怪的是,当我尝试使用 JetBrains DataGrip 和 localhost、mysql、root、admin 连接到 MariaDB 时,我可以连接到数据库,但不能使用 PDO。

我真的希望你能帮助我,谢谢你的时间。

以下是项目文件:

这是我的 docker-compose.yml 文件

version: "3.1"
services:

nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
links:
- php

php:
image: php:7.1-fpm
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"

mariadb:
image: mariadb:10.1
container_name: database
environment:
MYSQL_ROOT_PASSWORD: admin
ports:
- "3306:3306"

phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mariadb
ports:
- 8183:80
environment:
PMA_HOST: mariadb
PMA_USER: root
PMA_PASSWORD: admin
PMA_ARBITRARY: 1

我的 nginx.conf 文件:

server {
listen 80 default;

client_max_body_size 108M;

access_log /var/log/nginx/application.access.log;


root /public;
index index.php;

if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}

location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}

}

还有我的 index.php 文件

<?php

$servername = "localhost";
$username = "root";
$password = "admin";
$database = "mysql";

try {
$conn = new PDO("sqlite:host=".$servername.";dbname=" . $database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = $conn->prepare("SELECT * FROM testDB");
$sql->execute();

while($result = $sql->fetch(PDO::FETCH_ASSOC)){
$result['myTestData'];
}

}
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}

?>

最佳答案

这是因为您正试图从您的 php 容器访问主机名为 localhost 的数据库服务器,它解析为 php 容器本身(与 127.0.0.1 相同)。

您应该将您的 $servername 变量更改为等于您在撰写文件中的 mariadb 服务名称,例如“mariadb”

在你的情况下,每个容器都在一个默认网络中,由它的服务名称(除其他外)解析,这就是你不需要链接的原因,这些链接在某种程度上已被弃用。

此外(以防万一)确保您的数据库容器已实际启动并准备好接收连接。第一次启动需要一段时间。

关于php - Docker 无法使用 PHP 连接到 mariadb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46508038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com