【发布时间】:2021-06-04 13:25:53
【问题描述】:
我正在开发一个 NextJS 应用程序,我正在使用新的 next/image 组件进行自动优化。我正在尝试设置我的本地开发环境,以便能够提供来自本地 Minio 服务的图像。整个本地应用程序通过 docker-compose 运行。
我的问题是,当 Next 尝试从 Minio 下载图像时,我收到错误消息,我不知道为什么。
这是我得到的错误:
app_1 | FetchError: request to http://s3:9000/app-development/d5fc7f6b2d993e0e0eec8e2a2f4d3a50-image.jpeg failed, reason: connect ECONNREFUSED 127.0.0.1:9000
app_1 | at ClientRequest.<anonymous> (/usr/src/app/node_modules/node-fetch/lib/index.js:1461:11)
app_1 | at ClientRequest.emit (events.js:314:20)
app_1 | at Socket.socketErrorListener (_http_client.js:427:9)
app_1 | at Socket.emit (events.js:314:20)
app_1 | at emitErrorNT (internal/streams/destroy.js:92:8)
app_1 | at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
app_1 | at processTicksAndRejections (internal/process/task_queues.js:84:21) {
app_1 | type: 'system',
app_1 | errno: 'ECONNREFUSED',
app_1 | code: 'ECONNREFUSED'
app_1 | }
我知道我已经用 Minio 正确设置了所有内容,因为如果我在浏览器中打开一个简单的 HTML 文件,我的图像会显示得很好:
<!DOCTYPE html>
<html>
<body>
<img src="http://s3:9000/app-development/d5fc7f6b2d993e0e0eec8e2a2f4d3a50-image.jpeg" />
</body>
</html>
我不确定接下来该做什么。任何帮助将不胜感激!
编辑:我刚刚记得/意识到我的 NextJS 应用程序是通过完全独立的 docker/docker-compose 设置在本地运行的。我想知道这是否是 NextJS 应用程序难以从其自己的容器内访问 localhost 或 s3 服务的问题...
【问题讨论】:
-
如果它的服务器端渲染(ssr),那么图像 url 将从容器中拉出,并且 url 可能无法访问。尝试使其客户端呈现,以便从浏览器中提取图像 url。如果您使用的是函数组件,则在 useEffects() 中初始化 url 以使其成为客户端。
标签: node.js docker docker-compose next.js minio