Mysql 在 docker 上给出 "Connection refused" 错误
Mysql on docker gives "Connection refused" error
我使用 docker-compose 创建了我的 Laravel 项目。我在本地创建了一个名为 fhblog 的数据库。当我输入 php 容器和 运行 php artisan migrate
命令时,出现以下错误。
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = fhblog and table_name = migrations and table_type = 'BASE TABLE')
我搜索了问题的解决方法,按照大家的建议,还是无法解决错误。
我的 .env 文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=fhblog
DB_USERNAME=fhblog
DB_PASSWORD=root
我的mysql容器
.
.
.
db:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: fhblog
MYSQL_USER: fhblog
MYSQL_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker/mysql/db:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
.
.
.
在我的研究中,建议 运行 php artisan cache:clear
和 php artisan config:clear
命令,因为它们可以保留在“缓存”中。这些命令也没有解决我的问题。哪里出错了?
我认为你应该使用mysql的内部ip而不是容器名称;
登录 mysql 容器并 运行 bash
然后输入ifconfig
可能你的 ip 地址是这样的
172.0.0.23
复制并粘贴到
前面
DB_HOST=
但首先尝试使用容器名称作为您的
DB_HOST=mysql
甚至将其重命名为 mysql
以外的名称
例如mysql_container
container_name: mysql_container
...
DB_HOST=mysql_container
我之前尝试过 mysql IP。当我在 DBeaver 上遇到连接被拒绝错误时,它给了我一个 IP 地址 17.23.0.1。我以为这是我的mysql IP,就这样试了。我想查看我的容器 IP 并尝试了以下命令。出来的IP不一样。有了这个 IP,我终于可以 运行 php artisan migrate
代码了。
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
后来才知道,大可不必。如果我直接给容器名,我的问题就处理的更整齐了。
DB_HOST=db
我使用 docker-compose 创建了我的 Laravel 项目。我在本地创建了一个名为 fhblog 的数据库。当我输入 php 容器和 运行 php artisan migrate
命令时,出现以下错误。
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = fhblog and table_name = migrations and table_type = 'BASE TABLE')
我搜索了问题的解决方法,按照大家的建议,还是无法解决错误。
我的 .env 文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=fhblog
DB_USERNAME=fhblog
DB_PASSWORD=root
我的mysql容器
.
.
.
db:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: fhblog
MYSQL_USER: fhblog
MYSQL_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker/mysql/db:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
.
.
.
在我的研究中,建议 运行 php artisan cache:clear
和 php artisan config:clear
命令,因为它们可以保留在“缓存”中。这些命令也没有解决我的问题。哪里出错了?
我认为你应该使用mysql的内部ip而不是容器名称; 登录 mysql 容器并 运行 bash 然后输入ifconfig 可能你的 ip 地址是这样的
172.0.0.23
复制并粘贴到
前面DB_HOST=
但首先尝试使用容器名称作为您的
DB_HOST=mysql
甚至将其重命名为 mysql
以外的名称例如mysql_container
container_name: mysql_container
...
DB_HOST=mysql_container
我之前尝试过 mysql IP。当我在 DBeaver 上遇到连接被拒绝错误时,它给了我一个 IP 地址 17.23.0.1。我以为这是我的mysql IP,就这样试了。我想查看我的容器 IP 并尝试了以下命令。出来的IP不一样。有了这个 IP,我终于可以 运行 php artisan migrate
代码了。
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
后来才知道,大可不必。如果我直接给容器名,我的问题就处理的更整齐了。
DB_HOST=db