[英]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
您在主机端口上公开mysql
: 6033
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
的访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.