在这个上迷失了我的思绪。
我在Docker容器中有一个流明和MySQL设置。大多数事情都很好。我可以运行容器并通过浏览器访问Lumen。我可以通过Sequel Pro访问MySQL,没问题。我可以运行php artisan migrate
,它工作正常。
但是如果我尝试在浏览器中通过Lumen做任何事情,它将无法连接到数据库,它会给我连接拒绝错误。
我正在使用Lumen 5.7.7和.env文件看起来像这样:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
docker-compose.yml看起来像这样:
version: '3'
services:
api:
build:
context: .
dockerfile: .docker/Dockerfile
image: laravel-docker
ports:
- 8080:80
depends_on:
- mysqldb
volumes:
- .:/srv/app
# container_name:
mysqldb:
image: mysql:5.7
container_name: mysqldb
command: mysqld --user=root --verbose
volumes:
- ./schemadump.sql:/docker-entrypoint-initdb.d/schemadump.sql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
编辑:在网站和命令行上运行phpinfo()并意识到它们甚至不是相同的版本,更不用说完全相同的细节了。这可能是问题吗?再看一下......
嗯,它现在正在运作,有点像。我现在已经从浏览器而不是命令行工作了,我可以使用它。从上面的评论看,似乎缺少将api连接到数据库的“链接”部分是问题。 .env文件没有变化,但docker-compose.yml现在看起来像这样:
version: '3'
services:
api:
build:
context: .
dockerfile: .docker/Dockerfile
image: laravel-docker
ports:
- 8080:80
links:
- mysql
volumes:
- .:/srv/app
environment:
DB_HOST: mysql
DB_DATABASE: test
DB_USERNAME: test
DB_PASSWORD: test
mysql:
image: mysql:5.7
ports:
- 13306:3306
environment:
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: root
将“environment”部分添加到yml文件的api部分。这有所帮助。并更改了端口,因此与内部端口相比,它具有不同的外部端口。不是100%哪个部分使它正常工作,但它现在工作正常,我不打算更改它。