获取远程http图像时出现假想错误:获取“https://$path.jpg.webp”:拨打tcp 127.0.0.1:443:连接:连接被拒绝

问题描述 投票:0回答:1

我正在尝试将 imaginary 作为图像代理,并尝试使用 DDEV 修改 Drupal 中托管的图像。

当我通过 Imageproxy 调用图像时(http://localhost:8088/crop?width=500&height=400&url=https://imageproxy.ddev.site/sites/default/files/styles/wide/public/ 2024-11/8vwp5n_0.jpg.webp )我收到此错误:

'获取远程http图像时出错:获取 “https://imageproxy.ddev.site/sites/default/files/styles/wide/public/2024-11/8vwp5n_0.jpg.webp”: 拨打 tcp 127.0.0.1:443: 连接:连接被拒绝'

我还检查了浏览器响应标头:

HTTP/1.1 400 错误请求内容类型:application/json 服务器: 虚数 1.2.4 (bimg 1.1.4) X-Ratelimit-Limit: 101 X-Ratelimit-剩余:100 X-Ratelimit-重置:1 日期:2024 年 11 月 5 日,星期二 16:20:49 GMT 内容长度:215

如果我将 imageproxy 与另一个图像一起使用:http://localhost:8088/crop?width=500&height=200&url=https://raw.githubusercontent.com/h2non/imaginary/master/testdata/smart-crop.jpg

它可以工作,浏览器响应标头:

HTTP/1.1 200 OK 内容长度:12904 内容类型:image/jpeg 服务器: 虚数 1.2.4 (bimg 1.1.4) X-Ratelimit-Limit: 101 X-Ratelimit-剩余:100 X-Ratelimit-重置:1 日期:2024 年 11 月 5 日,星期二 格林威治标准时间 16:21:59

Imaginary 一直在从存储库运行 docker-compose,我什么也没做:

version: "3"

services:
  imaginary:
    image: h2non/imaginary
    ports:
      - "8088:8088"
    environment:
      - PORT=8088
    command: -concurrency 50 -enable-url-source

此外,DDEV 它以标准配置运行,我没有看到任何修改选项,也许可以让想象向服务器发出请求。

image proxy ddev
1个回答
0
投票

如果不通过网络进行通信,Docker 容器将无法相互通信。默认情况下,ddev 创建自己的 Docker 网络

ddev_default
,其容器使用该网络相互通信。

下面我将概述如何使用当前的 docker-compose 设置来修复此问题,但这实际上应该添加为 附加 ddev 服务,以便将其作为 ddev 设置的一部分添加到版本控制中。

要让您的外部 docker-compose 项目与 ddev 进行通信,您需要

  1. 将你想象的 docker 容器添加到 ddev 的外部网络
  2. 通过
    ddev-router
    容器将请求路由到您的 ddev 域
  3. 更新虚拟容器上的根证书存储以信任与 ddev 容器建立的 SSL 连接

我根据 Linux 上标准 ddev 设置的预期修改了您想象中的 docker-composer 文件:

# docker-compose.yaml (for imaginary)
services:
  imaginary:
    image: h2non/imaginary
    ports:
      - "8088:8088"
    environment:
      - PORT=8088
    command: -concurrency 50 -enable-url-source
    # Route your ddev domain imageproxy.ddev.site through the ddev router container
    external_links:
      - ddev-router:imageproxy.ddev.site
    # Add this container to the default ddev network so containers can communicate
    networks:
      - ddev_default
    # Mount host's cert store in container to avoid untrusted local dev SSL cert errors. This assumes a standard linux host.
    volumes:
      - /etc/ssl/certs:/etc/ssl/certs:ro

# Let docker-compose know that the ddev_default network is defined externally (by ddev)
networks:
    ddev_default:
        external: true
© www.soinside.com 2019 - 2024. All rights reserved.