Docker上的Laravel [2002]连接在端口3307上拒绝Mysql

时间:2019-05-10 10:24:05

标签: mysql docker laravel-5 docker-compose port

在Docker本地启动了Laravel 5.8应用程序。

我可以在浏览器上运行该应用程序,并在Sequel Pro上连接到数据库,但是当我尝试迁移数据库时,出现了可怕的[2002] Connection refused错误。

我将mysql端口设置为3307,因为我有另一个使用3306的mysql容器用于另一个项目。我不想继续为每个项目停止和启动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

3 个答案:

答案 0 :(得分:0)

我已经为遇到相同问题的任何人弄清楚了。

我必须调整.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。然后它成功运行了。

答案 1 :(得分:0)

DB_HOST=127.0.0.1更改为DB_HOST=mysql,它应该可以工作。因为在容器网络中,您的主机是 mysql 而不是127.0.0.1。

而且由于端口转发,因此无需将.env 3306更改为3307。docker将根据网络设置进行操作。保留为DB_PORT=3306

答案 2 :(得分:0)

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