简体   繁体   English

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

[英]Warning: mysqli::__construct(): (HY000/2002): Connection refused

They are newbie to docker. Get phpmyadmin, php, home assistant working.他们是docker的新手。获取phpmyadmin、php,家庭助理工作。 But I can't configure the docker well to be able to connect from php to a database.但是我无法很好地配置 docker 以能够从 php 连接到数据库。 Could you help me see what the problem is.能帮我看看是什么问题吗。

I tried everything.我尝试了一切。 I read many posts with the same error but could not get it to work.我读了很多有同样错误的帖子,但无法让它工作。

Thank you very much非常感谢你

This is my modified docker-compose这是我修改的 docker-compose

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

The new php example新的 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';
?>

The Dockerfile Dockerfile


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

My docker-compose我的 docker-compose

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
   

My php example我的 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';
?>

You are exposing mysql on host port: 6033您在主机端口上公开mysql6033

Did you try:你试过了吗:

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

Assuming its your example code running in the php container:假设您的示例代码在 php 容器中运行:

In which case use db as the hostname and mediciones as the database name in the connection.在这种情况下,使用db作为主机名,使用mediciones作为连接中的数据库名称。

For the db container:对于数据库容器:

  • MYSQL_USER set to non-root as this will cause potential errors. MYSQL_USER设置为非 root,因为这会导致潜在的错误。 This user is already given access on the MYSQL_DATABASE .该用户已获得MYSQL_DATABASE的访问权限。
  • use a persistent volume for /var/lib/mysql为 /var/lib/mysql 使用持久卷
  • (optionally), if your home assistant or php doesn't create the tables, you can use [mysql "Initializing a fresh instance"] https://hub.docker.com/_/mysql ) to initialize some tables. (可选),如果您的家庭助理或 php 没有创建表,您可以使用 [mysql "Initializing a fresh instance"] https://hub.docker.com/_/mysql ) 来初始化一些表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 警告:mysqli::__construct(): (HY000/2002): 连接被拒绝 - Warning: mysqli::__construct(): (HY000/2002): Connection refused in MySQL 错误 mysqli::__construct(): (HY000/2002): 连接被拒绝 - MySQL Error mysqli::__construct(): (HY000/2002): Connection refused 警告:mysqli_connect():( HY000 / 2002):拒绝连接 - Warning: mysqli_connect(): (HY000/2002): Connection refused in PHP 警告:mysqli_connect(): (HY000/2002): 连接被拒绝 - PHP Warning: mysqli_connect(): (HY000/2002): Connection refused 连接被拒绝“mysqli_connect(): (HY000/2002): Connection denied in ****************************conn.php on line 6 Failed - Connection refused "mysqli_connect(): (HY000/2002): Connection refused in **************************conn.php on line 6 Failed PHP警告:mysqli :: __ construct():(HY000 / 2002):没有这样的文件或目录(Debian GNU / Linux 9) - PHP Warning: mysqli::__construct(): (HY000/2002): No such file or directory (Debian GNU/Linux 9) mysqli_connect():(HY000 / 2002):使用ipv6地址拒绝连接 - mysqli_connect(): (HY000/2002): Connection refused using ipv6 address mysqli_connect(): (HY000/2002): 由于目标机器主动拒绝,无法建立连接 - mysqli_connect(): (HY000/2002): No connection could be made because the target machine actively refused it Mysqli_connect(): (HY000/2002): SYNOLOGY NAS 网站建设中的连接被拒绝 - Mysqli_connect(): (HY000/2002): Connection refused in Website Building ON SYNOLOGY NAS phpMyAdmin mysqli::real_connect(): (HY000/2002): 连接被拒绝 - phpMyAdmin mysqli::real_connect(): (HY000/2002): Connection refused
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM