gpt4 book ai didi

php - “Error: mysqli_connect() No Such File or Directory”。 PHP 7 FPM,MariaDB,Nginx,Docker

转载 作者:行者123 更新时间:2023-12-02 19:38:47 38 4
gpt4 key购买 nike

我正在学习Docker,现在还很陌生。我正在尝试使PHP 7 FPM,Nginx和MariaDB一起工作(
我正在使用this版本的PHP 7 FPM,因为它已经安装了MySQLi),但是出现以下错误:

Warning: mysqli_connect(): (HY000/2002): No such file or directory in /usr/share/nginx/html/index.php on line 4
Error: Unable to connect to MySQL. Debugging errno: 2002 Debugging error: No such file or directory



我的index.php看起来像这样:
<?php
header('Content-Type: application/json');

$link = mysqli_connect("localhost", "admin", "admin", "admin");

if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

我的Dockerfile看起来像这样:
version: '2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/site.conf:/etc/nginx/conf.d/default.conf
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
- ./public:/usr/share/nginx/html
links:
- php:php

php:
image: danieldent/php-7-fpm
volumes:
- ./public:/usr/share/nginx/html
- ./logs/log.conf:/usr/local/etc/php-fpm.d/zz-log.conf
- ./PHP/php.ini:/etc/php/7.0/fpm/php.ini
- ./PHP/php.ini:/usr/local/etc/php/conf.d/php.ini
links:
- mariadb:mysqlip

mariadb:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: pw
stdin_open: true
tty: true
ports:
- 3306:3306/tcp
labels:
io.rancher.container.pull_image: always
volumes:
- ./database:/var/lib/mysql

phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mariadb:db

我的php.ini文件中也启用了php_mysqli.dll扩展名。

再次,我对docker还是很陌生,但真的很想让它工作,谢谢任何建议。

最佳答案

您是否尝试过使用127.0.0.1而不是localhost?我相信使用localhost会强制客户端尝试使用本地Unix套接字而不是通过TCP进行连接,如here所述,并且未找到phpt容器中不存在的mysql.sock文件,因为MySQL安装在其他容器中,因此“没有这样的文件或目录”错误。

作为建议,我建议使用Docker的网络连接/链接功能来完成此Docker方式,以便您可以利用其某些DNS功能,并使您的设置更加便携和安全。当前,您正在将MySQL数据库端口发布到主机(因此是外部环境),并使php容器依赖于此事实,以便它可以通过localhost连接。实际上,默认情况下,只需要向容器内部已共享的网络中的PHP服务公开即可。更改您的撰写文件以显示这些端口,而不是像这样发布它们(微妙,我知道):

mariadb:
...
expose:
- "3306"
...

由于您已经在 mariadb服务中将 mysqlip服务称为 php了,因此Docker的 built-in container DNS resolution允许您通过链接的别名来引用您的容器,因此您的php代码现在可以使用 "mysqlip"而不是 "localhost""127.0.0.1"连接到MySQL,而Docker将采用在其网络中寻找正确的容器。

有关 exposeports背后的概念差异的更多信息,请参见 here

关于php - “Error: mysqli_connect() No Such File or Directory”。 PHP 7 FPM,MariaDB,Nginx,Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129451/

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