使用docker运行laravel artisan命令时拒绝连接

bwitn5fc  于 2021-06-25  发布在  Mysql
关注(0)|答案(4)|浏览(366)

我在docker运行Laravel5.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

我可以看到拉雷维尔欢迎页-这方面的事情工作。但当我跑的时候 php artisan migrate 我得到这个错误:
sqlstate[hy000][2002]连接被拒绝(sql:select*from information\u schema.tables where table\u schema=dev and table\u name=migrations)
我试过摆弄那张table host 以及 port 中的参数 .env 文件。

zhte4eai

zhte4eai1#

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

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

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

1u4esq0p

1u4esq0p2#

首先编辑你的 docker-compose.yml .

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

之后,在中设置正确的db端口 .env .
您的数据库端口错误。您正在尝试连接docker中暴露的端口。在这种情况下,您应该使用 DB_PORT=3306 在你的 .env .

nwwlzxa7

nwwlzxa73#

经过5个小时的研究,我在评论中发现了这句话:
移除端口,mariadb:latest sets 它在dockerfile中:这个图像公开了标准的mysql端口(3306)。。。
这意味着您必须在中使用端口3306 .env 在每个laravel项目中,要么为mysql(或mariadb)定义端口。
这意味着在只有主机的端口3306连接到数据库的laravel。

q0qdq0h2

q0qdq0h24#

尝试将端口更改为3306,并将db\u host=localhost用于yourdomain.com(您的ip)
别忘了sudo clear cache和config cache

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

相关问题