我具有以下Docker容器设置来支持CMS,但extensions卷中托管的PHP脚本存在一些主要问题。

version: '2'

services:
    bolt:
        image: rossriley/docker-bolt:3.2
        network_mode: bridge
        environment:
            - BOLT_TITLE=Red Moon Workshop
        ports:
            - 80:80
        volumes:
            - ./db-data:/var/www/html/app/database
            - ./files:/var/www/html/public/files
            - ./app/config:/var/www/html/app/config
            - ./public/theme/redmoon:/var/www/html/public/theme/redmoon
            - ./extensions:/var/www/html/extensions
        restart: always

extensions卷中,我有一个PHP脚本,该脚本从存储在同一主机中的文件中读取 header 。该脚本通常更复杂一些,但我将其归结为一个失败点:
$image = 'http://beta.redmoonworkshop.us/files/2017-06/1497665310_slide-splash-bg.png';
$headers = get_headers($image);

return $headers;

该错误抱怨它由于超时而无法打开流,但是,如果我在浏览器中打开URL,它就可以正常工作。
An exception has been thrown during the rendering of a template ("Warning: get_headers(http://beta.redmoonworkshop.us/files/2017-06/1497665310_slide-splash-bg.png): failed to open stream: Connection timed out")

我能够使它在本地运行,但是一旦将应用程序推送到Digital Ocean时它就开始失败,因此我不确定这里发生了什么。我对此脚本具有PHP依赖关系,并将该脚本存储在Docker容器中,但是我在Docker容器上都尝试了两种方式,但都没有运气。

如果我尝试访问任何远程托管的文件,它将正常工作。 (来自imgur或google等的任何信息)

这可能是权限问题,还是Docker与主机之间的通信出现故障?我对PHP和Docker还是很陌生,所以任何帮助将不胜感激。

更新#1

我试图通过以下命令从主机 curl 该文件,并且它起作用了。
curl -i http://beta.redmoonworkshop.us/files/2017-06/1497665310_slide-splash-bg.png

我尝试在Docker容器中执行相同的,但失败并出现以下错误:
Failed to connect to beta.redmoonworkshop.us port 80: Connection timed out

如果我尝试对同一图像进行 curl (但在本地主机上),则它可以工作。
curl -i http://localhost/files/2017-06/1497665310_slide-splash-bg.png

最佳答案

我已经解决了这个问题,我更新了docker-compose.yml文件以包括/etc/hosts文件的另一组主机:

extra_hosts:
  - "beta.redmoonworkshop.us:127.0.0.1"

现在,我可以 curl 域并获取存储在主机上的文件,而不会出现问题。

10-07 12:24
查看更多