使用Laravel在Docker Mysql上拒绝连接

时间:2019-09-24 15:06:45

标签: php mysql laravel docker

我无法从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

我尝试删除所有内容并重新构建图像,但无济于事。

你们能发现我的错误吗?

预先感谢

2 个答案:

答案 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