gpt4 book ai didi

php - 无法连接到mysql容器和docker中的php

转载 作者:行者123 更新时间:2023-11-29 07:24:54 25 4
gpt4 key购买 nike

尝试从 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 毫无问题地进行连接:

server: localhost user: root pass: 12345678

但是我在 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');

到目前为止我为解决问题所做的工作:

  1. 将 conn.php 主机更改为 127.0.0.1
  2. 将 conn.php 主机更改为 localhost
  3. 尝试使用 mysqli(也被拒绝连接)
  4. 尝试了另一个 php 图像(使用 apache、nginx 等)
  5. 尝试使用 mysql 作为主机

PS:我在 mac 上使用 docker

经过 5 个小时的研究,我真的不知道还能做什么,而且由于我不是 docker 专家,如果能给我指出修复方向的任何帮助,我将不胜感激。

谢谢!

最佳答案

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

您必须通过容器名称连接。或者 docker inspect 你的 mysql 容器并获取容器 IP。例如你的 docker-compose

database:
container_name: mysql

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

关于php - 无法连接到mysql容器和docker中的php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com