【问题标题】:PHP container can't see my app on localhostPHP 容器在 localhost 上看不到我的应用程序
【发布时间】:2019-02-25 16:19:40
【问题描述】:

我想在容器上运行 PHP 应用程序,当我去 localhost:5000 时,可以查看网站。运行容器时,在localhost:5000上看不到网站,只能在172.12.0.6:80上看到(不知道这个ip是什么)。

这是码头文件:

FROM php:7.0-apache
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
COPY ./index.php /var/www/html/
EXPOSE 5000

这是index.php,如果你有兴趣(我知道它很复杂):

<html>
<title>website</title>
        <body>
                <?php
                        echo "hello world";
                ?>
        </body>
</html>

这是我构建和运行映像的方式:

$ sudo docker build -t website website/
$ sudo docker run -it --name website --network mynetwork  website:latest

这是我运行映像时的日志:

$ sudo docker run -it --name website --network mynetwork  website:latest

[Mon Feb 25 16:08:05.912611 2019] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.0.33 configured -- resuming normal operations
[Mon Feb 25 16:08:05.912682 2019] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

【问题讨论】:

  • 尝试将-p 5000:80 添加到您的 docker run 命令中,该命令应该将 localhost 上的端口 5000 映射到容器的端口 80(很可能是 IP 172.12.0.6)。
  • 我没有足够的信用标记为答案,我该怎么办?

标签: php docker localhost containers


【解决方案1】:

您正在将您的容器连接到您的自定义网络mynetwork。因此,您需要显式公开端口80-&gt;5000

docker run -it --name website --network mynetwork  -p 5000:80 website:latest

有了这个你可以到达localhost:5000上的容器

另一个选项 - 使用network=host 模式。在这种模式下,您不需要(实际上也不能)公开端口,但会牺牲容器隔离,因为容器正在使用主机的网络。

docker run -it --name website --network=host website:latest

有了这个你可以到达localhost:80上的容器。请注意,network=host 不能更改容器的原始端口。

您的 Dockerfile 中的声明 EXPOSE 5000 仅供参考,doesn't actually perform port exposing

EXPOSE 指令实际上并不发布端口。它 充当构建者之间的一种文档 镜像和运行容器的人,关于哪些端口是 打算成为出版商

【讨论】:

  • 感谢您的快速响应!第一个解决方案不起作用,因为@Nigel Ren 提到需要 -p 5000:80。使用第二种解决方案,我可以访问 localhost:80,但不能访问 localhost:5000。
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 2021-12-03
  • 2011-09-23
  • 2020-07-06
  • 2023-03-16
  • 2018-05-29
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多