使用Docker运行Laravel artisan命令时连接被拒绝

时间:2018-05-09 13:11:42

标签: php mysql laravel docker docker-compose

我在Docker中运行Laravel 5.4。这是我的docker-compose.yml文件:

version: '2'

services:
  app:
    container_name: laravel_app
    image: webdevops/php-apache-dev:ubuntu-16.04
    links:
      - mysql
    depends_on:
      - mysql
    ports:
      - 8888:80
    volumes:
      - .:/app
    environment:
      docker: 'true'
      WEB_DOCUMENT_ROOT: '/app/public'
      WEB_NO_CACHE_PATTERN: '\.(.*)$$'
      working_dir: '/app'
  mysql:
    image: mariadb:latest
    ports:
      - 8889:80
    environment:
      MYSQL_ROOT_PASSWORD: 'dev'
      MYSQL_DATABASE: 'dev'
      MYSQL_USER: 'dev'
      MYSQL_PASSWORD: 'dev'

这是我.env文件的相关部分:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8889
DB_DATABASE=dev
DB_USERNAME=dev
DB_PASSWORD=dev

我能够看到Laravel欢迎页面 - 事情的一面有效。但是当我运行php artisan migrate时,我收到了这个错误:

  

SQLSTATE [HY000] [2002]拒绝连接(SQL:select * from information_schema.tables where table_schema = dev and table_name = migrations)

我试图摆弄host文件中的port.env参数。

5 个答案:

答案 0 :(得分:7)

这对我有用: 把我的 mysql 容器的名称而不是 127.0.0.1

NAME CONTAINERS

project-db --> container mysql
project-app --> container laravel

DB_CONNECTION=mysql
DB_HOST=project-db
DB_PORT=3306
DB_DATABASE=project
DB_USERNAME=root
DB_PASSWORD=root

答案 1 :(得分:3)

尝试将端口更改为3306并使用DB_HOST = localhost到yourdomain.com(您的IP)

别忘了Sudo清除缓存和配置缓存

DB_HOST=My_ip_for_virtual_machine (yourdomain.com)
sudo docker-compose exec app php artisan config:clear
sudo docker-compose exec app php artisan cache:clear

答案 2 :(得分:2)

首先修改您的docker-compose.yml

mysql:
    image: mariadb:latest
    ports:
      - 8889:3306

之后在.env中设置正确的数据库端口。

您的数据库端口错误。您正在尝试连接docker中的公开端口。在这种情况下,您应该在DB_PORT=3306中使用.env

答案 3 :(得分:1)

如果您不想像在@ kotapeter的答案中那样设置数据库端口,您可以通过运行以下方式通过docker调用工匠:

$ docker exec -it <name of container> php artisan migrate

查看您的docker-compose.yml,您的容器可能是laravel_app_app_1,但您可以通过运行docker ps

来检查

答案 4 :(得分:0)

研究5个小时后,我在评论中发现了这句话:

删除端口公开,mariadb:latest将其设置在其Dockerfile中:该图像公开了标准MySQL端口(3306)...

这意味着您必须在每个Laravel项目的src中使用端口3306,或者为Mysql(或mariaDB)定义端口。

这意味着在仅主机端口3306中,将您的Laravel连接到数据库。