尝试从php:latest镜像(没有apache或nginx)连接到mysql 8(mysql:latest),却收到此烦人的错误消息:

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /src/conn.php:5
Stack trace:
#0 /src/conn.php(5): PDO->__construct('mysql:host=data...', 'root', '12345678')
#1 {main}
  thrown in /src/conn.php on line 5

我在这里找到了关于stackoverflow的+20解决方案,但是没有一个能够解决我的问题。我可以使用以下凭据使用mysql workbench或DataGrid进行连接,而不会出现问题:



但是我在php镜像上使用的任何配置都无法使它们彼此连接。

我的docker-compose文件:
version: '3'
services:
  composer:
    container_name: composer
    networks:
      - backend
    image: composer
    volumes:
      - .:/app
    command: install
  database:
    container_name: mysql
    networks:
      - backend
    image: mysql:latest
    volumes:
      - ./database/mysqldata:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
  php:
    build:
      context: .
    container_name: php
    networks:
      - backend
    image: php:apache
    links:
      - database
    env_file:
      - .env
    volumes:
      - .:/
    command:
      php /src/conn.php
    depends_on:
      - composer
      - database
networks:
  backend:

我的conn.php:
<?php
    $db = new PDO('mysql:host=database;dbname=testdb', 'root', '12345678');

我到目前为止所做的尝试以解决此问题:
  • 将conn.php主机更改为127.0.0.1
  • 将conn.php主机更改为localhost
  • 尝试使用mysqli(也拒绝连接)
  • 尝试了另一个php图像(使用Apache,nginx等)
  • 尝试使用mysql作为主机

  • PS:我将docker用于Mac

    经过5个小时的研究,我真的不知道该怎么办,并且由于我不是Docker专家,所以希望能为我指出修复的方向。

    谢谢!

    最佳答案

    在您的情况下,您无法通过localhost127.0.0.1连接到mysql。如果您这样连接。它调用localhost inside php容器。但是您的php容器中没有安装mysql。

    您必须通过容器名称connetc。或者docker inspect您的mysql容器,并获得容器IP。例如,使用docker-compose

    database:
        container_name: mysql
    

    现在,您的mysql数据库主机是mysql-容器名称,而不是localhost

    10-08 08:11
    查看更多