php - 无法使用 Docker 访问在主机上找到的文件(无法打开流 : Connection timed out)

标签 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")

我能够在本地完成这项工作,但是一旦我将应用程序推送到 Digital Ocean,它就开始失败,所以我不确定这里发生了什么。我有一个存储在 Docker 容器中的脚本的 PHP 依赖项,并且我将脚本存储在一个卷中,但是我已经在 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 域并毫无问题地获取存储在主机上的文件。

关于php - 无法使用 Docker 访问在主机上找到的文件(无法打开流 : Connection timed out),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44615809/

相关文章:

php - 如何在表单的选择列表中使用 "any"在mysql中工作?

java - 如何在docker compose中配置logstash?

PHP根据两行从数据库中检索不同的数据

php - 如何查询多对多

docker - 如何公开在docker中运行的kubernetes服务?

docker - 如何更新 Hyperledger Fabric 中的链码?

linux - docker-compose up 导致 "client and server don' t 版本相同(客户端 : 1. 14,服务器 : 1. 12)“错误但客户端和服务器版本相同

tomcat - docker tomcat通过dockerfile编辑配置文件

php - 显示与数据库字段不同的值

git - Docker 构建推送操作 "Not a valid object name";输出 repo 的所有分支和标签