Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将mysql与laravel(docker)连接_Mysql_Laravel_Docker - Fatal编程技术网

无法将mysql与laravel(docker)连接

无法将mysql与laravel(docker)连接,mysql,laravel,docker,Mysql,Laravel,Docker,我对laravel和docker非常陌生,我尝试将mysql连接到php容器(laravel)。 我原以为在laravel项目中设置了docker-compose.yml和env文件 此外,我还可以连接到容器内的mysql数据库 我迁移php artisan时出现了一个错误: SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = my

我对laravel和docker非常陌生,我尝试将mysql连接到php容器(laravel)。 我原以为在laravel项目中设置了docker-compose.yml和env文件

此外,我还可以连接到容器内的mysql数据库

我迁移php artisan时出现了一个错误:

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

环境

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

--default-authentication-plugin=mysql_native_password

MySQL版本8.0.4已将默认身份验证机制从MySQL_native_password更改为缓存_sha2_password。问题是大多数客户机尚未实现通过此机制进行身份验证的能力。在Laravel的例子中,这依赖于PHP,PHP在v7.4中才开始支持这一点


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

最终解决了此问题。 我变了 DB_HOST=127.0.0.1到DB_HOST=DB,那么它就成功了

“DB_HOST=docker-compose.yml上mysql容器的服务名称”


这次我的mysql容器名是db,所以需要将db_主机命名为db。

尝试使用mysql:5.7映像(即mysql的5.7版)谢谢您的建议!我改变了身份验证机制。并显示另一个错误。SQLSTATE[HY000][2002]没有这样的文件或目录(SQL:select*from information_schema.tables,其中table_schema=myapp和table_name=migrations,table_type='BASE table',您仍然需要创建数据库。PHP artisan migrate:fresh,我相信也可以。如果我有另一个docker与MySQL和PHPMyAdmin组合。它是否与此lamp环境连接。如果是,那么如何连接?#knknknk@k)nkn
--default-authentication-plugin=mysql_native_password