我在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
参数。
答案 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连接到数据库。