【问题标题】:Docker php with apache on localhost: ERR_SSL_PROTOCOL_ERROR在本地主机上使用 apache 的 Docker php:ERR_SSL_PROTOCOL_ERROR
【发布时间】:2020-06-02 16:04:44
【问题描述】:

我正在尝试在带有 Docker Desktop 的 Windows 10 上的 docker 容器中使用 apache 和 php 提供 hello_world.php 文件。

这是 Dockerfile:

FROM php:7.3-apache
# install git and zip, both needed for composer
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git && \
    apt-get install zip unzip
# install composer
RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer && chmod +x /usr/bin/composer 

RUN a2enmod headers
RUN echo 'ServerName localhost' >> /etc/apache2/apache2.conf
COPY . /var/www/html
WORKDIR /var/www/html

#RUN composer install
EXPOSE 80

如您所见,一些用于设置作曲家等的附加代码(这样我就可以对现有的 PHP 应用程序进行 docker 化)甚至被注释掉了,但它甚至不适用于基本的 hello world php 文件并且没有其他文件(例如没有 .htaccess)。

首先,我使用docker build . 构建图像。然后当我执行docker run -it -p 8000:80 d7cd1255a20f 时,我得到控制台输出

[Tue Jun 02 16:01:29.592455 2020] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.3.18 configured -- resuming normal operations
[Tue Jun 02 16:01:29.592531 2020] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

我觉得不错。 我在浏览器中打开 http://localhost:8000 并得到“无法建立安全连接。ERR_SSL_PROTOCOL_ERROR”。服务器日志显示(每次我在浏览器中加载页面时显示两行):

172.17.0.1 - - [02/Jun/2020:16:02:55 +0000] "\x16\x03\x01\x02" 400 0 "-" "-"
172.17.0.1 - - [02/Jun/2020:16:02:55 +0000] "\x16\x03\x01\x02" 400 0 "-" "-"

我已经对此进行了研究,看起来这是 TLS 握手的开始。

我怎样才能让它工作?

【问题讨论】:

    标签: php apache docker


    【解决方案1】:

    /var/www/html 中是否有任何 .htaccess 文件?看起来 Apache 正在执行到 HTTPS 的自动重定向。使用 /var/www/html 的空目录构建映像并通过 HTTP 正确运行 docker run -it -p 8000:80 d7cd1255a20f

    【讨论】:

    • 我在当前工作目录中只有 hello world php(它只是一个 html 页面和一个与“hello world”相呼应的 php 标签)和 Dockerfile。如果默认没有,这不是它不起作用的原因。
    【解决方案2】:

    好的试试这个

    按照文件夹结构

    phpExample/
       php/
          index.php
       dockerfile
    

    码头文件

    FROM php:7.3-apache
    COPY php/ /var/www/html
    EXPOSE 80
    

    index.php

    <?php
    echo "Hello World from Docker container using PHP<br>";
    echo '<img src="https://www.docker.com/sites/default/files/d8/2019-07/Moby-logo.png">';
    ?>
    

    在此之后运行以下命令

    docker build -t helloWorld-php-docker .
    

    构建完成时。

    docker run -p 80:80 helloWorld-php-docker
    

    请确保端口 80 未被使用,或者您可以做些什么来更改端口号

    PS:目录结构不是强制性的。我添加只是为了构建示例?

    【讨论】:

    • 好吧,超级奇怪:我试过这个解决方案,它奏效了。然后我添加了上面发布的 dockerfile。它也奏效了。我怀疑系统重启有帮助,或者我只是启动了错误的容器或类似的容器。经验教训:使用标签确保运行正确的容器。
    猜你喜欢
    • 2022-08-18
    • 2011-05-13
    • 1970-01-01
    • 2016-07-31
    • 2018-04-12
    • 2018-06-26
    • 1970-01-01
    • 2017-03-16
    • 2014-12-20
    相关资源
    最近更新 更多