SQLSTATE[HY000] [2002] 连接被拒绝(SQL:select * 来自 information_schema.tables 其中 table_schema = ms_api_shop
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = ms_api_shop
我将 Lumen 与 Docker 结合使用来创建简单的 API 进行身份验证。安装 LumenPassport 后,我无法迁移数据库。我可以使用 Dbeaver 轻松连接到 MySQL 数据库。
为了同样的目的,我已经创建了一个 Lumen Docker 项目,这是第二个。第一个没有问题。此外,我检查了 MySQL 数据库, ms_api_shop 在那里
错误:
这是我的 docker-compose
services:
nginx:
build:
context: .
dockerfile: docker/Nginx.Dockerfile
image: nginx
ports:
- 8092:80
depends_on:
- fpm
volumes:
- ./:/var/www/lumen-docker
links:
- mysql
fpm:
build:
context: .
dockerfile: docker/fpm.Dockerfile
volumes:
- ./:/var/www/lumen-docker
depends_on:
- mysql
links:
- mysql
mysql:
image: mysql:5.7
ports:
- 33006:3306
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_DATABASE=ms_api_shop
- MYSQL_ROOT_USER=
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
和环境:
DB_HOST=mysql
DB_PORT=33006
DB_DATABASE=ms_api_shop
DB_USERNAME=
DB_PASSWORD=
在您的 docker 文件中,您将 33006
容器端口绑定到主机端口的 3306
。如果您想访问 MySQL,您应该使用 3306
而不是像在 .env
中那样使用 33006
我在 Docker 中有一个 Laravel 应用程序 运行,我的 docker 配置的一部分如下所示:
但我个人觉得他们应该在一个docker网络内,看下面我docker-compose.yml
中最后两行代码:
mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./mysql:/var/lib/mysql
networks:
- laravel
据我所知,docker 容器在同一个网络时可以相互通信。您似乎还没有在 docker-compose
中连接这两个 docker。要从容器中获取网络信息,可以使用以下命令。
$ docker inspect --format='{{json .NetworkSettings.Networks}}' <docker_container_name>
如果您需要连接这两个容器,请按照以下步骤操作:
首先,您创建一个网络
$ docker network create my-net
其次,将容器连接到网络。
$ docker network connect my-net <docker_container_name>
不要忘记将这两个容器连接到网络。
我将 Lumen 与 Docker 结合使用来创建简单的 API 进行身份验证。安装 LumenPassport 后,我无法迁移数据库。我可以使用 Dbeaver 轻松连接到 MySQL 数据库。 为了同样的目的,我已经创建了一个 Lumen Docker 项目,这是第二个。第一个没有问题。此外,我检查了 MySQL 数据库, ms_api_shop 在那里
错误:
这是我的 docker-compose
services:
nginx:
build:
context: .
dockerfile: docker/Nginx.Dockerfile
image: nginx
ports:
- 8092:80
depends_on:
- fpm
volumes:
- ./:/var/www/lumen-docker
links:
- mysql
fpm:
build:
context: .
dockerfile: docker/fpm.Dockerfile
volumes:
- ./:/var/www/lumen-docker
depends_on:
- mysql
links:
- mysql
mysql:
image: mysql:5.7
ports:
- 33006:3306
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_DATABASE=ms_api_shop
- MYSQL_ROOT_USER=
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
和环境:
DB_HOST=mysql
DB_PORT=33006
DB_DATABASE=ms_api_shop
DB_USERNAME=
DB_PASSWORD=
在您的 docker 文件中,您将 33006
容器端口绑定到主机端口的 3306
。如果您想访问 MySQL,您应该使用 3306
而不是像在 .env
33006
我在 Docker 中有一个 Laravel 应用程序 运行,我的 docker 配置的一部分如下所示:
但我个人觉得他们应该在一个docker网络内,看下面我docker-compose.yml
中最后两行代码:
mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./mysql:/var/lib/mysql
networks:
- laravel
据我所知,docker 容器在同一个网络时可以相互通信。您似乎还没有在 docker-compose
中连接这两个 docker。要从容器中获取网络信息,可以使用以下命令。
$ docker inspect --format='{{json .NetworkSettings.Networks}}' <docker_container_name>
如果您需要连接这两个容器,请按照以下步骤操作:
首先,您创建一个网络
$ docker network create my-net
其次,将容器连接到网络。
$ docker network connect my-net <docker_container_name>
不要忘记将这两个容器连接到网络。