带有 php 内置服务器的 Docker

2022-08-30 16:59:03

我正在尝试通过docker运行php内置服务器(),我无法从主机访问站点 - 我总是以连接重置结束。php -S localhost:8080

以下是我构建的一个简单的 Dockerfile:

FROM centos:centos6

RUN rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

RUN yum --enablerepo=remi,remi-php55 install -y php php-opcache php-cli php-pear php-common && yum clean all
RUN php -r "readfile('https://getcomposer.org/installer');" | php
RUN echo "date.timezone = Europe/Prague" >> /etc/php.ini
RUN mv composer.phar /usr/bin/composer
RUN php -r "eval('?>'.file_get_contents('http://backend.bolt80.com/piecrust/install'));"
RUN mv piecrust.phar /usr/bin/chef

CMD ["/bin/bash"]

是否有可能使用 docker 运行此服务器?在尝试使其工作时,我发现当nginx安装并设置为侦听此端口时,可以从主机访问它。PHP内置服务器似乎对主机隐藏,因此无法满足任何请求。

有人成功地完成了这项工作吗?


答案 1

如果从 Docker 容器中启动 Web 服务器,则 Web 服务器将仅接受来自 docker 容器本身的连接。php -S localhost:8080

为了能够从 Docker 主机与 Web 服务器进行通信,您需要进行两项更改:

  • 在 Docker 文件中,添加 ,或者在运行容器时将添加到命令行。这将告诉 Docker 主机,您的容器有一个程序,该程序需要端口 8080 上的通信EXPOSE 8080-p 8080docker run
  • 启动 Web 服务器,以便它也接受来自 docker 容器本身外部的连接php -S 0.0.0.0:8080

运行包含这些更改的容器后,在 docker 主机上打开一个新终端,然后使用该命令查看 Docker 主机上的哪个端口转发到容器中的端口 8080。例如:docker ps

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
fbccf4058b07        test:latest         "php -S 0.0.0.0:8080   4 minutes ago       Up 4 minutes        0.0.0.0:49153->8080/tcp   sad_hawking

在此示例中,将使用 docker 主机的端口。然后查询您的Web服务器以验证您可以与它进行通信:49153

$ curl http://localhost:49153


答案 2

推荐