首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当后端位于SvelteKit容器中时

当后端位于SvelteKit容器中时
EN

Stack Overflow用户
提问于 2022-07-01 20:18:03
回答 2查看 298关注 0票数 2

我在我的项目中使用了码头构图。它包括以下集装箱:

  1. Nginx
  2. PostgreSQL
  3. 后端(Node.js)
  4. 前端(SvelteKit)

我使用SvelteKit的Load function向后端发送请求。简而言之,它将http request发送到client-sideserver-side上的backend容器。这意味着,请求不仅可以通过浏览器发送,还可以通过容器本身发送。

我不能让它在客户端和服务器端都能工作。他们中只有一个在工作。

我试过这些网址:

  • http://api.localhost/articles (只有client-side请求才能工作)
  • http://api.host.docker.internal/articles (只有server-side请求才能工作)
  • http://backend:8080/articles (只有server-side请求才能工作)

我知道这个错误:

来自SvelteKitFetchError: request to http://api.localhost/articles failed, reason: connect ECONNREFUSED 127.0.0.1:80

来自Nginx:超时错误

Docker-compose.yml文件:

代码语言:javascript
复制
version: '3.8'
services:

  webserver:
    restart: unless-stopped
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    depends_on:
      - frontend
      - backend
    networks:
      - webserver
    volumes:
      - ./webserver/nginx/conf/:/etc/nginx/conf.d/
      - ./webserver/certbot/www:/var/www/certbot/:ro
      - ./webserver/certbot/conf/:/etc/nginx/ssl/:ro

  backend:
    restart: unless-stopped
    build:
      context: ./backend
      target: development
    ports:
      - 8080:8080
    depends_on:
      - db
    networks:
      - database
      - webserver
    volumes:
      - ./backend:/app

  frontend:
    restart: unless-stopped
    build:
      context: ./frontend
      target: development
    ports:
      - 3000:3000
    depends_on:
      - backend
    networks:
      - webserver

networks:
  database:
    driver: bridge
  webserver:
    driver: bridge

如何使用server-side作为URL向docker container发送http://api.localhost/articles请求?如果可能的话,我还希望我的容器可以作为http://backend:8080被其他容器访问。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-02 13:01:28

使用SvelteKit的externalFetch钩子在前端和后端具有不同的和重写的API。

在码头-组成,容器应该能够按名称相互访问。如果他们是在同一个码头网络。

您的前端停靠器SSR应该能够通过使用URL调用后端停靠程序:

代码语言:javascript
复制
http://backend:8080

Web浏览器应该能够通过使用URL调用后端:

代码语言:javascript
复制
(whatever reads in your Nginx configuration files)

当然,这可能失败的原因有很多。解决这个问题的最好方法是一个接一个地测试curl,一个服务器一个服务器地使用curl并将地址输入到web浏览器地址。它不可能回答失败的确切原因,因为这个问题没有包含足够的信息,或者这个问题通常是可重复的。

欲了解更多信息,请访问下面是我们对一个已编辑的SvelteKit前端的示例配置内部后端快捷方式使用钩子定义。和配置变量。下面是我们的externalFetch示例

票数 2
EN

Stack Overflow用户

发布于 2022-07-01 20:44:15

您可以使用dns (您在撰写文件中给出的服务名称)从一个容器中卷曲。

代码语言:javascript
复制
CURL -XGET backend:8080

您也可以通过在主机驱动程序网络上运行所有这些容器来实现这一点。

关于http://api.localhost/articles

您可以更改/etc/hosts

并指定当使用此url:http://api.localhost/articles时,您希望计算机尝试与之通信的IP。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72834263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档