我无法从php / laravel容器连接到mysql数据库。我一直都拒绝连接。不过,该连接在Mysql Workbench上也可以正常工作。
我的docker-compose看起来像这样:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel
mysql:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: project_db
MYSQL_USER: dev
MYSQL_PASSWORD: dev
MYSQL_ROOT_PASSWORD: dev
SERVICE_TAGS: dev
networks:
- laravel
php:
build:
context: .
dockerfile: Dockerfile
container_name: php_node
volumes:
- ./src:/var/www
ports:
- "9000:9000"
networks:
- laravel
.env的相关部分如下所示:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=project_db
DB_USERNAME=root
DB_PASSWORD=dev
我尝试删除所有内容并重新构建图像,但无济于事。
你们能发现我的错误吗?
预先感谢
答案 0 :(得分:2)
在Windows的Docker上,您可以使用host.docker.internal访问主机IP。
我在评论中回答了这个问题,但我想我会把它重复作为一个正确的答案,以帮助将来发现这个问题的人,并保存他们阅读所有评论
答案 1 :(得分:0)
要提取码头工人容器名称及其IP,请在终端中使用以下命令:
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
它将显示类似以下内容的信息:
/nginx - 172.18.0.4
/php - 172.18.0.3
/mysql - 172.18.0.2
然后在.env文件中使用mysql容器ip
DB_HOST=172.18.0.2