Php Lumen/Docker/MySQL(SQLSTATE[HY000][2002]连接被拒绝),但我可以进行外部连接
我在这件事上疯了 我在Docker容器中安装了Lumen和MySQL。大多数情况下,一切都很好。我可以运行容器并通过浏览器访问流明。我可以通过Sequel Pro访问MySQL,没问题。我可以运行Php Lumen/Docker/MySQL(SQLSTATE[HY000][2002]连接被拒绝),但我可以进行外部连接,php,mysql,docker,lumen,Php,Mysql,Docker,Lumen,我在这件事上疯了 我在Docker容器中安装了Lumen和MySQL。大多数情况下,一切都很好。我可以运行容器并通过浏览器访问流明。我可以通过Sequel Pro访问MySQL,没问题。我可以运行phpartisan-migrate,效果很好 但如果我试图通过浏览器中的Lumen执行任何操作,它将无法连接到数据库,并且它会给我连接拒绝错误 我使用的Lumen 5.7.7和.env文件如下所示: DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306
phpartisan-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
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"
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
docker-compose.yml如下所示:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
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"
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
编辑:在站点和命令行上运行phpinfo(),发现它们甚至不是相同的版本,更不用说相同的详细信息了。这就是问题所在吗?再看一看…嗯,它现在在某种程度上起作用了。我现在可以从浏览器而不是命令行使用它,我可以使用命令行。从上面的评论来看,问题似乎在于缺少一个连接api和数据库的“链接”部分。env文件未更改,但docker-compose.yml现在看起来如下所示:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
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"
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
将“环境”部分添加到yml文件的api部分。这有帮助。并更改了端口,使其具有与内部端口不同的外部端口。不是100%哪个部分使它工作正常,但它现在工作正常,我不打算再做更多的更改。嗯,它现在工作了,有点像。我现在可以从浏览器而不是命令行使用它,我可以使用命令行。从上面的评论来看,问题似乎在于缺少一个连接api和数据库的“链接”部分。env文件未更改,但docker-compose.yml现在看起来如下所示:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root
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"
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
将“环境”部分添加到yml文件的api部分。这有帮助。并更改了端口,使其具有与内部端口不同的外部端口。不是100%哪一部分使它工作正常,但它目前工作正常,我不打算对其进行更多更改。为什么不使用link链接api和mysqldb服务。在api上添加链接,以便它可以访问mysqldb。目前,我正在使用link连接docker上运行的多个服务,但将来可能会被弃用future@TaraPrasadGurung谢谢这帮助我认识到我使用的新.yml文件的不同之处!缺少的“link”部分一定是问题所在。为什么不使用link链接api和mysqldb服务。在api上添加链接,以便它可以访问mysqldb。目前,我正在使用link连接docker上运行的多个服务,但将来可能会被弃用future@TaraPrasadGurung谢谢这帮助我认识到我使用的新.yml文件的不同之处!丢失的“链接”部分一定是问题所在。