gpt4 book ai didi

mysql - docker compose MySQL 容器 [2002] 连接被拒绝

转载 作者:行者123 更新时间:2023-11-29 01:12:49 29 4
gpt4 key购买 nike

我正在尝试为 Nginx + PHP(Laravel) + MySQL 构建 docker compose 容器,但我一直收到连接被拒绝的错误

docker-compose.yml

version: "3"
services:

nginx:
image: nginx:latest
ports:
- '8080:80'
volumes:
- ./nginx:/etc/nginx/conf.d
- ./logs/nginx:/var/logs/nginx
- ./apps:/var/www/html
depends_on:
- php
restart: always

php:
image: laradock/php-fpm:2.2-7.2
volumes:
- ./apps:/var/www/html
restart: always
mysql:
image: mariadb
ports:
- '33060:3306'
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
restart: always

./apps 中,我有一个带有基本 SQL 设置的全新 Laravel 应用程序

所有容器都运行无误,我可以使用以下命令连接到 MySQL 容器

mysql -u 127.0.0.1 -P 33060 -u root -p

但是当我尝试从浏览器访问或将 ssh 定向到 php 容器时,我不断收到错误 2002。

我在服务器上运行了 nginx 和 mysql,所以我使用 8080 和 33060 端口,不确定是否是这个问题。

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret

感谢您的帮助。

最佳答案

this Github Issue 得到灵感

My first guess is that it is dying trying to find the mysql unixsocket file, when it needs to be connecting over a non-localhostconnection. If you are using the compose file to start them, then youcan connect to the dns name provided by docker (ie, links:docker-mysql, sets the dns name to be docker-mysql). So you have tochange your connection line:

- php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8', 'root', '123123');"

+ php -r "new PDO('mysql:host=docker-mysql;port=3306;charset=utf8', 'root', '123123');"

通过将 DB_HOST 更改为 .env 文件中的 docker 容器名称解决了这个问题

DB_HOST=docker_mysql_1

关于mysql - docker compose MySQL 容器 [2002] 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50325230/

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