mysql - docker compose MySQL 容器 [2002] 连接被拒绝
问题描述
我正在尝试为 Nginx + PHP(Laravel) + MySQL 构建 docker compose 容器,但我不断收到 Connection denied 错误
码头工人-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
谢谢你的帮助。
解决方案
从这个 Github 问题中得到想法
我的第一个猜测是,当它需要通过非本地主机连接进行连接时,它正在尝试查找 mysql unix 套接字文件。如果你使用compose文件启动它们,那么你可以连接到docker提供的dns名称(即链接:docker-mysql,将dns名称设置为docker-mysql)。所以你必须改变你的连接线:
- 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
为 docker 容器名称解决了这个问题.env
DB_HOST=docker_mysql_1
推荐阅读
- c# - .Net Core Console App 的 Startup.Configure 模式
- c++ - 更改 CDateTimeCtrl 的背景颜色
- genetic-algorithm - 减少基因的非均匀分布
- r - 替换“。” R中的一个字符
- javascript - 数据到仪表中的特定点
- excel - 如何将文件保存在与宏保存相同的目录中
- ruby-on-rails - 将 2 个哈希与相同的键组合
- python - 将熊猫数据框的 2 列转换为列表
- php - PHP 仅使用 opendir() 列表目录并允许点击显示内容
- python - root 用户时无法在 python 中导入 scapy.all