我遇到的问题是,当我尝试连接到Docker容器中的数据库时,我不断通过PDO收到错误SQLSTATE[HY000] [2002] Connection refused
。我已经尝试过here中提到的方法以及其他一些非常相似的内容,但均无济于事。 MySQL当前处于活动状态,并准备接受连接。我正在运行具有Compose File版本19.03.12
的Docker Engine 1.26.2
Compose 2.3.0.4 (46911)
Docker Desktop 3.8
。以下是我的 docker-compose.yml :
version: "3.8"
services:
web:
build:
context: ./php
dockerfile: Dockerfile
container_name: php74
depends_on:
- database
ports:
- "8000:80"
volumes:
- "./php:/var/www/html"
database:
command: "--default-authentication-plugin=mysql_native_password"
container_name: mysql8
environment:
MYSQL_DATABASE: quizzane
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: quizzane
MYSQL_PASSWORD: "QFtdFZk2wC-c4skfJ?5#TPLrXyeZVTJ99=s*GEBVR_!XQ9B?_?NE+Dwc7pL!2fzb"
image: "mysql:8.0.21"
ports:
- "6033:3306"
restart: always
然后是我的 Dockerfile :
FROM php:7.4.9-apache
RUN apt-get update && apt-get upgrade -y
RUN apt-get install openssl curl zlib1g-dev enchant libsodium-dev libzip-dev bzip2 libcurl4-openssl-dev libssl-dev libpng-dev libgmp-dev libxml2-dev libenchant-dev libc-client2007e-dev libc-client-dev libkrb5-dev libonig-dev libedit-dev libtidy-dev libxslt-dev libgd2-xpm-dev -y
RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install bcmath calendar ctype curl enchant exif ffi ftp gd gmp iconv imap intl mbstring pcntl pdo pdo_mysql readline shmop soap sockets sodium sysvmsg sysvsem sysvshm tidy tokenizer xsl zip -j$(nproc)
RUN ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
EXPOSE 80
和我的PDO连接文件:
try {
$datasource = 'mysql:host=127.18.0.2;port=6033;dbname=quizzane';
$username = 'quizzane';
$password = 'QFtdFZk2wC-c4skfJ?5#TPLrXyeZVTJ99=s*GEBVR_!XQ9B?_?NE+Dwc7pL!2fzb';
$pdo = new PDO($datasource, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
不是localhost的IP是Docker容器的IP。这是MySQL启动时显示的部分内容:
mysql8 | 2020-08-30T17:19:08.484523Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.