【问题标题】:Can not connect mysql with laravel (docker)无法使用laravel(docker)连接mysql
【发布时间】:2020-11-05 18:10:24
【问题描述】:

我对 laravel 和 docker 非常陌生,并试图将 mysql 连接到 php 容器(laravel)。 我想在 laravel 项目中正确设置我的 docker-compose.yml 和 env 文件。

另外,我可以连接到容器内的mysql db。

这是我做 php artisan migrate 时的错误:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = myapp and table_name = migrations and table_type = 'BASE TABLE')

谁能知道发生了什么?

docker-compose.yml

version: '3'

services:
  php:
    container_name: php
    build: ./docker/php
    volumes:
    - ./myapp/:/var/www


  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
    - 80:80
    volumes:
    - ./myapp/:/var/www
    - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
    - php

  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root1234
      MYSQL_DATABASE: myapp
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ports:
    - 3306:3306

环境

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=docker
DB_PASSWORD=docker


【问题讨论】:

  • 尝试使用mysql:5.7镜像(即mysql的5.7版本)

标签: mysql laravel docker


【解决方案1】:

终于解决了这个问题。 我改变了 .env DB_HOST=127.0.0.1 到 DB_HOST=db 然后就可以了!!

" DB_HOST= docker-compose.yml 上mysql容器的服务名"

这次我的mysql容器名是db,所以需要DB_HOST为db。

【讨论】:

  • 如果我有另一个使用 MySQL 和 PHPMyAdmin 的 docker-compose。是否与此灯环境有关。如果是,那怎么办? #knkn @knkn
【解决方案2】:

您正在运行 mysql 8,there are considerations 用于身份验证机制。尝试将以下内容添加到您的 mysql 容器的命令中:

--default-authentication-plugin=mysql_native_password

MySQL 版本 8.0.4 已将默认身份验证机制从 mysql_native_password 更改为 caching_sha2_password。问题是大多数客户端还没有实现通过这种机制进行身份验证的能力。在 Laravel 的情况下,这依赖于 PHP,而 PHP 在 v7.4 中才开始支持。

我个人还没有尝试在我的一个项目中配置它,并且不确定 Laravel 是否支持这种“开箱即用”。

【讨论】:

  • 感谢您的建议!我更改了身份验证机制。并显示另一个错误。 SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL: select * from information_schema.tables where table_schema = myapp and table_name = migrations and table_type = 'BASE TABLE'
  • 您仍然需要创建数据库。 PHP artisan migrate:fresh,我相信也会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2018-10-02
  • 2021-06-16
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多