Glu*_*ear 5 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'
Run Code Online (Sandbox Code Playgroud)
这是我的.env文件的相关部分:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8889
DB_DATABASE=dev
DB_USERNAME=dev
DB_PASSWORD=dev
Run Code Online (Sandbox Code Playgroud)
我能够看到 Laravel 欢迎页面 - 事情的那一面是有效的。但是当我运行时,php artisan migrate我收到此错误:
SQLSTATE[HY000] [2002] 连接被拒绝(SQL: select * from information_schema.tables where table_schema = dev and table_name = migrations)
我试过摆弄文件中的host和port参数.env。
首先编辑您的docker-compose.yml.
mysql:
image: mariadb:latest
ports:
- 8889:3306
Run Code Online (Sandbox Code Playgroud)
之后在.env.
你的数据库端口是错误的。您正在尝试连接 docker 内的暴露端口。在这种情况下,您应该DB_PORT=3306在您的.env.
这对我有用:输入我的 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
Run Code Online (Sandbox Code Playgroud)
经过 5 个小时的研究,我在评论中发现了这句话:
删除端口公开,mariadb:latest 在其 Dockerfile 中设置它:此映像公开标准 MySQL 端口 (3306)...
这意味着您必须在每个 Laravel 项目中使用端口 3306 .env,无论您为 Mysql(或 mariaDB)定义端口。
这意味着在主机中仅使用端口 3306 将 Laravel 连接到数据库。
| 归档时间: |
|
| 查看次数: |
10507 次 |
| 最近记录: |