Laravel Docker [2002] 端口 3307 上的连接被拒绝 Mysql
Laravel on Docker [2002] Connection refused to Mysql on Port 3307
在 Docker 本地启动了一个 Laravel 5.8 应用程序。
我可以 运行 我的浏览器上的应用程序,连接到 Sequel Pro 上的数据库,但是当我尝试迁移数据库时,我遇到了可怕的 [2002] Connection refused
错误。
我已将 mysql 端口设置为 3307,因为我有另一个 mysql 容器使用 3306 用于不同的项目。我不想为每个项目不停地停止和启动 docker,因为我可能会经常在这两个项目之间切换,这就是我使用不同端口的原因。
这是 docker-compose 文件中的 mysql 部分。
mysql:
image: mysql:5.7
ports:
- "3307:3306"
environment:
MYSQL_HOST: 127.0.0.1
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: forecast
MYSQL_USER: forecast
MYSQL_PASSWORD: secret
volumes:
- mysql:/var/lib/mysql
networks:
- forecast
这是我的 .env 文件数据库设置密钥
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=forecast
DB_USERNAME=forecast
DB_PASSWORD=secret
同样值得注意的是,出于同样的原因,我运行将应用程序连接到端口 81 而不是 80。在我的浏览器中,我必须输入 {domain.testing}:81
才能正常工作。
我已经为遇到同样问题的任何人解决了这个问题。
我不得不调整我的 .env 文件。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
所以我将 DB_HOST
更改为 mysql
,将 DB_PORT
更改回 3306
,因为 docker 将其映射到 3307。然后它成功运行了。
将 DB_HOST=127.0.0.1
更改为 DB_HOST=mysql
,它应该可以工作。因为在容器网络中,您的主机是 mysql 而不是 127.0.0.1.
而且由于端口转发,无需将 .env 3306 更改为 3307。docker 将根据网络设置执行。保留为 DB_PORT=3306
将127.0.0.1
更改为mysql
mysql:
image: mysql:5.7
ports:
- "3307:3306"
environment:
MYSQL_HOST: mysql
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: forecast
MYSQL_USER: forecast
MYSQL_PASSWORD: secret
volumes:
- mysql:/var/lib/mysql
networks:
- forecast
在 Docker 本地启动了一个 Laravel 5.8 应用程序。
我可以 运行 我的浏览器上的应用程序,连接到 Sequel Pro 上的数据库,但是当我尝试迁移数据库时,我遇到了可怕的 [2002] Connection refused
错误。
我已将 mysql 端口设置为 3307,因为我有另一个 mysql 容器使用 3306 用于不同的项目。我不想为每个项目不停地停止和启动 docker,因为我可能会经常在这两个项目之间切换,这就是我使用不同端口的原因。
这是 docker-compose 文件中的 mysql 部分。
mysql:
image: mysql:5.7
ports:
- "3307:3306"
environment:
MYSQL_HOST: 127.0.0.1
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: forecast
MYSQL_USER: forecast
MYSQL_PASSWORD: secret
volumes:
- mysql:/var/lib/mysql
networks:
- forecast
这是我的 .env 文件数据库设置密钥
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=forecast
DB_USERNAME=forecast
DB_PASSWORD=secret
同样值得注意的是,出于同样的原因,我运行将应用程序连接到端口 81 而不是 80。在我的浏览器中,我必须输入 {domain.testing}:81
才能正常工作。
我已经为遇到同样问题的任何人解决了这个问题。
我不得不调整我的 .env 文件。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
所以我将 DB_HOST
更改为 mysql
,将 DB_PORT
更改回 3306
,因为 docker 将其映射到 3307。然后它成功运行了。
将 DB_HOST=127.0.0.1
更改为 DB_HOST=mysql
,它应该可以工作。因为在容器网络中,您的主机是 mysql 而不是 127.0.0.1.
而且由于端口转发,无需将 .env 3306 更改为 3307。docker 将根据网络设置执行。保留为 DB_PORT=3306
将127.0.0.1
更改为mysql
mysql:
image: mysql:5.7
ports:
- "3307:3306"
environment:
MYSQL_HOST: mysql
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: forecast
MYSQL_USER: forecast
MYSQL_PASSWORD: secret
volumes:
- mysql:/var/lib/mysql
networks:
- forecast