【问题标题】:Multiple websites inside Docker nginx container - PHP container works only with oneDocker nginx 容器内的多个网站 - PHP 容器仅适用于一个
【发布时间】:2018-03-02 14:17:38
【问题描述】:

我有 3 个 Docker 容器(nginx、php 和 mysql)通过 docker-compose 捆绑在一起。

/etc/nginx/sites-enabled 我有 2 个网站的 .conf 文件。

magento2.loc  > magento2.conf
pma.loc       > pma.conf

在主机(Ubuntu)上我相应地修改了/etc/hosts

127.0.0.1  > magent2.loc
127.0.0.1  > pma.loc

docker-compose.yml

version: '2'

services:
    nginx:
        (...)
        links:
            - php
        (...)
    php:
       (...)

运行docker-compose up后,服务器登录控制台显示:

  • php 和 nginx 对 magento2.loc 的响应
  • 但只有来自 pma.loc 的 nginx(无 php)的响应

如何使 pma.loc 与 PHP 一起工作?我需要多个 PHP 容器吗?

【问题讨论】:

  • 我已经养成了为每个网站创建单独容器的习惯。然后,您必须确保您的配置正确,以便能够提供两个(或更多)网站。
  • @JayBlanchard 你是指单独的 php 容器还是全部?我需要一个可以由 phpMyAdmin 和一个应用程序访问的 mysql 容器。它可以与 2 x php、2 x nginx、1 x 共享 mysql 一起使用吗?
  • phpMyAdmin 是一个应用程序,而不是数据库。我将数据库(MySQL)放在一个容器中,然后将我的 Web 容器链接到 MySQL 容器。

标签: php docker nginx


【解决方案1】:

实现您想要实现的目标的最简单方法是首先将您的数据库放在它自己的容器中。然后,为每个网站创建一个包含运行网站所需组件的容器,如下所示:

您将在每个网站容器和数据库容器之间建立链接。当然,您必须为每个网站创建虚拟主机,以免它们发生端口冲突。

对于这个问题,有一个稍微复杂的解决方案,您可以使用另一个 Docker 容器充当代理,将流量适当地引导到每个网站。另一个解决方案,也就是您现在尝试做的,是在同一个容器中运行多个网站,您必须在其中为容器中的每个网站建立 server blocks(Nginx 的虚拟主机术语)。

在任何情况下,您都应该将数据库放在自己的容器中,并在 Docker 运行命令或 Docker-Compose 设置中链接到该容器。

【讨论】:

  • 非常感谢杰。该图像是我在阅读您的评论后想到的,但我不确定它是否会起作用。然后,我找到了 'corbinu/docker-phpmyadmin' 图像,将它与我的 database 容器相关联,而后者又已经链接到 nginxphp 容器。我正在阅读有关代理解决方案的信息,但尚未尝试过。不幸的是,“服务器块”解决方案不起作用 - 请求到达 nginx 容器但没有通过 php 容器。
  • 很高兴帮助了艾伦。代理解决方案运行良好(我有几个它在生产中运行的实例,我需要节省硬件并最大限度地利用数据库。)但设置起来可能很挑剔。如果您想尝试一下,请大声喊叫。
猜你喜欢
  • 2021-07-22
  • 1970-01-01
  • 2018-10-28
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多