首页 > 解决方案 > 无法用laravel(docker)连接mysql

问题描述

我对 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')

谁能知道发生了什么?

码头工人-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


标签: mysqllaraveldocker

解决方案


终于解决了这个问题。我将 .env DB_HOST=127.0.0.1 更改为 DB_HOST=db 然后它的工作!

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

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


推荐阅读