无法访问使用Docker在主机上找到的文件(无法打开流:连接超时)

时间:2017-06-18 14:05:50

标签: php docker docker-compose

我有以下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脚本,它从存储在同一主机中的文件中读取标头。脚本通常有点复杂,但我把它归结为一个失败点,这个:

$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")

我能够在本地工作但是一旦我将应用程序推送到数字海洋,它就开始失败了,所以我不确定这里发生了什么。我有一个存储在Docker容器中的脚本的PHP依赖项,我将脚本存储在一个卷中,但是我已经在Docker容器上同时尝试了两种方法而没有运气。

如果我尝试访问任何远程托管文件,它可以正常运行。 (任何来自imgur或谷歌等)

这可能是一个权限问题,还是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

如果我尝试卷曲相同的图像(但在localhost上)它可以工作。

curl -i http://localhost/files/2017-06/1497665310_slide-splash-bg.png

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,我已经更新了我的docker-compose.yml文件,以便为/etc/hosts文件添加一组额外的主机:

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

现在我能够卷曲域并将文件存储在主机上而不会出现问题。