连接失败:SQLSTATE [HY000] [2002]尝试通过Docker连接到MySQL时,连接被拒绝

时间:2020-08-30 17:31:40

标签: php mysql docker pdo docker-compose

我遇到的问题是,当我尝试连接到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.

0 个答案:

没有答案