1

我正在尝试让本地开发环境运行多个项目。经过一番繁重的修改后,我偶然发现了这个项目,并开始将其调整到我自己的项目中。每个项目由 2 个容器组成,一个 mysql 容器和一个 php 容器(来自php-apache图像)。

nginx-proxy是一个在网络上运行的独立容器。我稍微重命名了项目,所以这里叫dev-router_default.

我的项目compose.yml看起来像这样:

version: "3"
services:
  php:
    build: './.docker/php/'
    volumes:
      - .:/var/www/html/
    environment:
      - VIRTUAL_HOST=XXX.local
  mysql:
    build: './.docker/mysql/'
    ports:
      - "3309:3306"
    environment:
      MYSQL_DATABASE: XXX
      MYSQL_USER: XXX
      MYSQL_PASSWORD: XXX
      MYSQL_ROOT_PASSWORD: XXX
      VIRTUAL_HOST: XXX.local
networks:
  default:
    external:
      name: dev-router_default

这些dockerfiles文件夹中的现在只是基本图像。它们只是存在,所以我以后可以放大它们。

一切都很顺利。我可以访问数据库,我可以加载 html 和 php 页面。然而。每当我加载页面时。我有 50% 的机会得到这个错误:

SQLSTATE[HY000] [1045] Access denied for user

其他 50% 的页面加载工作正常。这不是密码错误或任何问题。设置都保持不变,但不知何故,一个连接被拒绝,另一个连接通过。

我有一种直觉,nginx-proxy一半时间没有将我的流量重定向到正确的 mysql 容器。但我似乎无法找到电话被发送到的地方。当我加载一个页面时,我在容器 CLI 中看到了 php_1 加载的日志弹出窗口。但是 mysql_1 保持沉默。

有谁知道是什么导致了这种不一致?

有没有更简单的方法来使用 docker 同时使用多个虚拟主机/域来设置开发环境?

我需要能够访问多个数据库(我现在通过为每个项目提供一个特定的端口来实现这一点),并且每个项目都有一个唯一的 url 绑定到一个document_root.

4

1 回答 1

1

这里的问题是服务的名称。所有项目都有一个 php 和一个 mysql 容器。我通过服务的名称访问 mysql HOST(在这种情况下,所有项目都是 mysql)。主机“mysql”在多个项目中被多次定义。命名 mysql 容器 projectname-mysql 修复它。

于 2018-11-20T14:34:53.853 回答