警告:mysqli::__construct():(HY000/2002):连接被拒绝



他们是码头工人的新手。让phpmyadmin,php,家庭助理工作。但我不能很好地配置docker,使其能够从php连接到数据库。你能帮我看看问题出在哪里吗?

我什么都试过了。我读了很多有同样错误的帖子,但没能让它发挥作用。

非常感谢

这是我修改的docker撰写

version: '3.4'
services:
web:
build:
context: ./php
dockerfile: Dockerfile
container_name: php73
depends_on:
- db
volumes:
- ./php:/var/www/html/
environment:
MYSQL_HOST: mysql8
MYSQL_USER: pf
MYSQL_PASSWWORD: 123456
MYSQL_DB: ha
ports:
- 3001:80
db:
container_name: mysql8
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_USER: pf
MYSQL_PASSWWORD: 123456
MYSQL_DATABASE: ha
volumes: 
- /var/lib/mysql
ports:
- 6033:3306
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
depends_on: 
- db
restart: always
ports:
- 8080:80
environment:
PMA_ARBITRARY: 1
PMA_HOST: db
PMA_PORT: 3306
MYSQL_USER: pf
MYSQL_PASSWWORD: 123456
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /sessions

新的php示例

<?php
$host = 'db';
$user = 'pf';
$password = '123456';
$db = 'ha';
$conn = new mysqli($host,$user,$password,$db,3306);
if($conn->connect_error) {
echo 'connection failed' . $conn->connect_error; 
} 
echo 'Sucessfully connected msql';
?>

Dockerfile


FROM php:7.3.3-apache
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli
EXPOSE 80

我的码头工人撰写

version: '3.3'
services:
web:
build:
context: ./php
dockerfile: Dockerfile
container_name: php73
depends_on:
- db
volumes:
- ./php:/var/www/html/
ports:
- 80:80
db:
container_name: mysql8
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mediciones
MYSQL_USER: root
MYSQL_PASSWWORD: root
ports:
- 6033:3306
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
depends_on: 
- db
restart: always
ports:
- 8080:80
environment:
PMA_ARBITRARY: 1
PMA_HOST: db
MYSQL_ROOT_PASSWORT: root
homeassistant:
container_name: homeassistant
restart: unless-stopped
image: homeassistant/home-assistant
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
- /dev/ttyACM0:/dev/ttyACM0
volumes:
- ${USERDIR}/docker/homeassistant:/config
- /etc/localtime:/etc/localtime:ro
- ${USERDIR}/docker/shared:/shared
- /dev/serial/by-id/:/dev/serial/by-id/
network_mode: host
privileged: true

我的php示例

<?php
$host = '127.0.0.1';
$user = 'root';
$password = 'root';
$db = 'ha';
$conn = new mysqli($host,$user,$password,$db);
if($conn->connect_error) {
echo 'connection failed' . $conn->connect_error; 
} 
echo 'Sucessfully connected msql';
?>

假设它是在php容器中运行的示例代码:

在这种情况下,在连接中使用db作为主机名,使用mediciones作为数据库名称。

对于数据库容器:

  • MYSQL_USER设置为非根,因为这将导致潜在的错误。该用户已被授予访问MYSQL_DATABASE的权限
  • 对/var/lib/mysql使用持久卷
  • (可选(,如果您的家庭助理或php没有创建表,您可以使用[mysql"初始化一个新实例"]https://hub.docker.com/_/mysql)以初始化某些表

您正在主机端口上暴露mysql6033

你试过了吗:

$conn = new mysqli($host,$user,$password,$db,6033);

最新更新