Docker Gatsby Strapi 产生 ECONNREJECT 127.0.0.1:1337 错误



我一直在通过命令行与Strapi和Gatsby合作,以启动并运行网站和CMS,类似于这个设置 - https://strapi.io/blog/building-a-static-website-using-gatsby-and-strapi。一切正常,我已准备好进入下一步并将项目放入 Docker 进行部署。

在Docker中启动并运行Strapi和Mongo数据库实例非常简单,与 https://strapi.io/documentation/3.0.0-beta.x/installation/docker.html 设置几乎相同。

当我尝试将我的 Gatsby 安装到 Docker 中时出现问题。我已经在docker-compose.yml和Dockerfile中尝试了大量不同的配置设置,但是我一直遇到错误

错误 #11321 插件

"gatsby-source-strapi"在运行sourceNodes时抛出错误 生命周期:连接 ECONN,127.0.0.1:1337

错误:连接 ECONN,拒绝 127.0.0.1:1337

Strapi 和 Mongo 服务在同一个 docker-compose.yml 文件中运行良好,如下所示

version: "3"
services:
strapi:
image: strapi/strapi
environment:
DATABASE_CLIENT: mongo
DATABASE_NAME: strapi
DATABASE_HOST: mongo
DATABASE_PORT: 27017
DATABASE_USERNAME: strapi
DATABASE_PASSWORD: strapi
links:
- mongo:mongo
volumes:
- ./cms:/srv/cms
ports:
- "1337:1337"
mongo:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: strapi
MONGO_INITDB_ROOT_PASSWORD: strapi
volumes:
- ./db/db:/db/db
ports:
- "27017:27017"
gatsby:
image: docker-gatsby-client
build: ./website
command: gatsby develop -H 0.0.0.0
volumes:
- ./website:/usr/src/app/website
- /usr/src/app/website/node_modules
ports:
- "8000:8000"
depends_on:
- strapi
- mongo
environment:
GATSBY_WEBPACK_PUBLICPATH: /
STRAPI_URL: strapi:1337

我的 Dockerfile 看起来像这样

FROM node:12
WORKDIR /usr/src/app/website
COPY package*.json ./
RUN npm install
RUN npm install -g gatsby-cli
RUN npm install --save gatsby-source-strapi
COPY . .
EXPOSE 8000
CMD ["yarn", "develop", "-H", "0.0.0.0" ]

我在撰写文件中尝试了很多不同的设置,例如不使用卷,以及Dockerfile,例如使用不同的节点版本。它们都不起作用,并且都返回上述相同的错误。

如果我从命令行运行 Gatsby 服务,它会从 Docker 容器连接到 Strapi 服务,世界一切都很好。这让我认为 Docker 中的 Gatsby 服务设置不正确,这会产生连接错误。

有人有什么想法吗?

在浏览了 Gatsby 容器的日志后,我用一个简单的 Hello World 实例替换了我完成的网站,这样我就可以将其从列表中删除或潜在的障碍。盖茨比继续成功旋转。

更改 gatsby-config.js 文件中的某些内容以包含与 API 相关的数据会导致返回连接错误。将文件中的 apiURL 值从 http://localhost:1337 更改为 http://0.0.0.0:1337 不会更改任何内容。

在 Mac 上搜索跨容器连接问题导致了一个线索,最终对我有用。

这个问题——https://github.com/docker/for-mac/issues/2705——是关键。将 apiURL 值更改为 http://docker.for.mac.localhost:1337 允许 API 在 Strapi 和 Gatsby 之间连接。这个值不适合我,因为一些同事使用 PC,所以这似乎不对。进一步挖掘发现了有效的 http://host.docker.internal:1337 的apiURL值。我将在生产版本与开发版本进行比较时测试所有这些,看看这一切如何。

最新更新