【问题标题】:Warning: mysqli::__construct(): (HY000/2002): Connection refused警告:mysqli::__construct(): (HY000/2002): 连接被拒绝
【发布时间】:2020-08-21 23:32:56
【问题描述】:

他们是 docker 的新手。 让 phpmyadmin、php、家庭助理工作。但是我无法很好地配置 docker 以便能够从 php 连接到数据库。你能帮我看看是什么问题吗?

我什么都试过了。我阅读了许多具有相同错误的帖子,但无法正常工作。

非常感谢

这是我修改后的 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

新的 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

我的 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
   

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

【问题讨论】:

  • MYSQL_ROOT_PASSWORT。拼写很重要。
  • 对不起。我不明白
  • 我没看过谢谢
  • 同样与MYSQL_PASSWWORD
  • 我更正了,但同样的错误仍然存​​在

标签: php mysql docker docker-compose


【解决方案1】:

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

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

对于 db 容器:

  • MYSQL_USER 设置为非 root,因为这会导致潜在的错误。此用户已获得MYSQL_DATABASE 的访问权限。
  • 为 /var/lib/mysql 使用持久卷
  • (可选),如果你的home assistant或者php没有创建表,你可以使用[mysql "Initializing a fresh instance"]https://hub.docker.com/_/mysql)来初始化一些表。

【讨论】:

  • 我有点困惑,因为这是我第一次使用 docker。我刚刚更改了 MYSQL_USER 但它一直使用 root 登录。谢谢
  • MYSQL_USER这样的环境变量被mysql:8.0容器用来影响数据库的初始化。如果你为你的容器设置这个,你必须确保在你的应用程序中使用它。
  • 我觉得我做得很好
  • 解决方案是使用链接:db
【解决方案2】:

您正在将mysql 暴露在主机端口:6033

你试过了吗:

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

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 2015-03-10
    • 1970-01-01
    • 2020-02-08
    • 2020-04-15
    • 2017-07-12
    • 2021-07-10
    • 2017-05-04
    • 2020-01-22
    相关资源
    最近更新 更多