我正在尝试将 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 它以标准配置运行,我没有看到任何修改选项,也许可以让想象向服务器发出请求。
如果不通过网络进行通信,Docker 容器将无法相互通信。默认情况下,ddev 创建自己的 Docker 网络
ddev_default
,其容器使用该网络相互通信。
下面我将概述如何使用当前的 docker-compose 设置来修复此问题,但这实际上应该添加为 附加 ddev 服务,以便将其作为 ddev 设置的一部分添加到版本控制中。
要让您的外部 docker-compose 项目与 ddev 进行通信,您需要
ddev-router
容器将请求路由到您的 ddev 域我根据 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