PHP 容器无法在本地主机上看到我的应用程序

pin*_*kyo 0 php containers localhost docker

我想在容器上运行 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
Run Code Online (Sandbox Code Playgroud)

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

<html>
<title>website</title>
        <body>
                <?php
                        echo "hello world";
                ?>
        </body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

$ sudo docker build -t website website/
$ sudo docker run -it --name website --network mynetwork  website:latest
Run Code Online (Sandbox Code Playgroud)

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

$ 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'
Run Code Online (Sandbox Code Playgroud)

gra*_*pes 5

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

docker run -it --name website --network mynetwork  -p 5000:80 website:latest
Run Code Online (Sandbox Code Playgroud)

这样你就可以到达容器localhost:5000

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

docker run -it --name website --network=host website:latest
Run Code Online (Sandbox Code Playgroud)

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

Dockerfile 中的语句EXPOSE 5000仅供参考,实际上并不执行端口暴露

EXPOSE指令实际上并不发布端口。它充当构建映像的人员和运行容器的人员之间的一种文档,关于要发布哪些端口