【问题标题】:I need some advice with a Laravel docker setup我需要一些关于 Laravel docker 设置的建议
【发布时间】:2020-03-14 11:11:37
【问题描述】:

我有一个奇怪的问题,即为本地开发人员 dockerising 一个 Laravel 应用程序。 PHP 容器需要 mysql 容器的 docker 内部 IP 地址,而不是 127.0.0.1,否则会中断并显示以下消息:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `users` where `email` = jr@m3u.com limit 1)

如果我使用检查命令:docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

我可以看到每个容器的 172 个范围 IP 地址,如果我在 Laravel 的 .env 文件中将 mysql 服务器更改为 172.31.0.2,那么应用程序就可以正常工作。

这是我的 docker-compose.yml 文件:

version: '3'

networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8888: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:
      - 3310:3306
    environment:
      MYSQL_DATABASE: docker
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      MYSQL_ROOT_PASSWORD: root
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - laravel

  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ../src:/var/www
    ports:
      - "9000:9000"
    networks:
      - laravel

任何帮助将不胜感激。 :-)

【问题讨论】:

  • 你的mysql不是一个不同的容器吗?所以 127.0.0.1 不起作用。您的设置按预期工作。将每个新容器视为不同的服务器。

标签: laravel docker


【解决方案1】:

这很正常。

127.0.0.1 意味着执行代码的容器可以联系同一个容器上的数据库,这不是您的情况,因为每个服务在您的 compose 结构中都有自己的容器(这很棒)。

就像network documentation 中提到的那样,容器默认加入同一个网络,因此它们能够在该 docker 内部网络上通过名称或 IP 相互访问。

默认情况下,Compose 会为您的应用设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问它们,并且它们可以通过与容器名称相同的主机名发现。

据我所知,您有 3 个选择:

  • 使用容器名称 (mysql) 作为主机名
  • 提供容器的 IP 地址(我不推荐,因为重新启动容器时 IP 可能会发生变化。每次容器 IP 更改时,您都必须手动更改主机 IP - 或多或少每次重新启动)
  • 另一种方法是在 docker-compose 网络上定义静态 IPS。 @参见网络文档的the ip section

不过,此时我会使用容器名称作为主机名。它简单明了。

【讨论】:

  • 非常感谢。现在很清楚我的错误是什么。
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多