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