PHP容器在localhost上看不到我的应用程序

时间:2019-02-25 16:19:41

标签: php docker localhost containers

我想在容器上运行PHP应用程序,当我进入localhost:5000时,要查看网站。运行容器时,无法在localhost:5000上看到该网站,而只能在172.12.0.6:80上看到该网站(我不知道这是什么IP)。

这是dockerfile:

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'

1 个答案:

答案 0 :(得分:4)

您正在将容器连接到自定义网络mynetwork。因此,您需要显式公开端口80->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指令实际上并未发布端口。它   充当构建者之间的一种文档类型   图片和运行容器的人,关于哪些端口是   打算成为发布者