Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker nginx容器内的多个网站-PHP容器仅适用于一个_Php_Docker_Nginx - Fatal编程技术网

Docker nginx容器内的多个网站-PHP容器仅适用于一个

Docker nginx容器内的多个网站-PHP容器仅适用于一个,php,docker,nginx,Php,Docker,Nginx,我有3个Docker容器(nginx、php和mysql)通过Docker compose捆绑在一起 在/etc/nginx/sites enabled中,我有两个网站的.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-comp

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

/etc/nginx/sites enabled
中,我有两个网站的.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容器吗?

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

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

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


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

我习惯于为每个网站创建单独的容器。然后您必须确保您的配置正确,以便能够提供两个(或更多)网站。@JayBlanchard您是指单独的php容器还是全部?我需要一个可以被phpMyAdmin和一个应用程序访问的mysql容器。它能与2个php、2个nginx、1个共享mysql一起工作吗?phpMyAdmin是一个应用程序,而不是数据库。我将数据库(MySQL)放在一个容器中,然后将我的web容器链接到MySQL容器。非常感谢Jay。这张图片是我读了你的评论后想到的,但我不确定它是否有效。然后,我找到了“corbinu/docker phpmyadmin”图像,将其与我的
数据库
容器链接,而该容器又已链接到
nginx
php
容器。我在读代理解决方案,但还没有尝试过。不幸的是,“服务器块”解决方案不起作用-请求到达nginx容器,但没有通过php容器。很高兴帮助Alan。代理解决方案工作得很好(我有几个实例在生产环境中运行,我需要节省硬件并最大限度地提高数据库使用率。)但安装起来可能很挑剔。如果你想试试,就喊我一声。