猿问

Docker可以看到image.png文件,但是浏览器不显示图片

我正在学习 Docker 和 Swoole。运行一个包含 2 个文件和一个空目录的 Docker 容器。在浏览器中访问 HTTP 服务器时,不显示图像(获取损坏的图像图标)。


我已经从外部网页尝试了 PNG,该图像显示正确。我也试过“docker run -it hello-swoole sh”并确认容器显示


data  index.php  image.png

文件


FROM php:7.2-fpm


RUN apt-get update && apt-get install vim -y && \

    apt-get install openssl -y && \

    apt-get install libssl-dev -y && \

    apt-get install wget -y 


RUN cd /tmp && wget https://pecl.php.net/get/swoole-4.2.9.tgz && \

    tar zxvf swoole-4.2.9.tgz && \

    cd swoole-4.2.9  && \

    phpize  && \

    ./configure  --enable-openssl && \

    make && make install


RUN touch /usr/local/etc/php/conf.d/swoole.ini && \

    echo 'extension=swoole.so' > /usr/local/etc/php/conf.d/swoole.ini


RUN mkdir -p /app/data


WORKDIR /app


COPY ./app /app


EXPOSE 8101

CMD ["/usr/local/bin/php", "/app/index.php"]

索引.php


<?php

$http = new swoole_http_server("0.0.0.0", 8101);


$http->on("start", function ($server) {

    echo "Swoole http server is started at http://127.0.0.1:8101\n";

});


$http->on("request", function ($request, $response) {

    $response->header("Content-Type", "text/html; charset=utf-8");

    $response->end('<!DOCTYPE html><html><body><img src="image.png"></body></html>');

});


$http->start();

知道为什么不显示 image.png 吗?


更新 以下工作来显示图像,但没有显示任何 HTML。感觉爱德华的答案在这里是正确的,我还没有正确处理所有请求。现在可以肯定,这个问题更像是一个 Swoole 问题而不是 Docker 问题。


<?php

$http = new swoole_http_server("0.0.0.0", 8101);


$http->on("start", function ($server) {

    echo "Swoole http server is started at http://127.0.0.1:8101\n";

});


$http->on("request", function ($request, $response) {

    $response->header('Content-Type', 'image/png');

    $response->sendfile('image.png'); // code seems to stop executing here

    $response->header("Content-Type", "text/html; charset=utf-8");

    $response->end('<!DOCTYPE html><html><body><img src="/image.png"></body></html>');

});


$http->start();


小唯快跑啊
浏览 400回答 2
2回答

慕尼黑5688855

我设法在这里找到答案:https : //www.swoole.co.uk/docs/modules/swoole-http-server/configuration ...只需要添加:$http->set([&nbsp; &nbsp; 'document_root' => '/app',&nbsp; &nbsp; 'enable_static_handler' => true,]);完整更新代码<?php$http = new swoole_http_server("0.0.0.0", 8101);$http->set([&nbsp; &nbsp; 'document_root' => '/app',&nbsp; &nbsp; 'enable_static_handler' => true,]);$http->on("start", function ($server) {&nbsp; &nbsp; echo "Swoole http server is started at http://127.0.0.1:8101\n";});$http->on("request", function ($request, $response) {&nbsp; &nbsp; $response->header("Content-Type", "text/html; charset=utf-8");&nbsp; &nbsp; $response->end('<!DOCTYPE html><html><body><img src="image.png" height="200"></body></html>');});$http->start();

aluckdog

我假设您还必须对服务器进行编程以提供静态文件。
随时随地看视频慕课网APP
我要回答