繁体   English   中英

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

[英]Connection refused when running Laravel artisan command with Docker

我在 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)

我试过摆弄.env文件中的hostport参数。

首先编辑你docker-compose.yml

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

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

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

这对我有用:输入我的 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

尝试将端口更改为 3306 并使用 DB_HOST=localhost 到 yourdomain.com(your 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

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

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

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

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

如果您不想像@kotapeter 的回答那样设置 DB 端口,则可以通过运行以下命令通过 docker 调用 artisan:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM