我在我的项目中使用docker compose.它包括以下容器:

  1. NGINX公司
  2. PostgreSQL
  3. 后端(Node.js)
  4. 前端(SvelteKit)

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

我无法让它同时在客户端和服务器端抓取上工作.其中只有一个在工作.

我try 了以下URL:

  • http://api.localhost/articles(仅client-side个请求工作)
  • http://api.host.docker.internal/articles(仅server-side个请求工作)
  • http://backend:8080/articles(仅server-side个请求工作)

我发现这个错误:

SvelteKit开始:

NGINX公司开始:

Docker-compose.yml file:

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

如何使用http://api.localhost/articles作为URL向docker container发送server-side个请求?如果可能的话,我还希望我的集装箱能被其他集装箱接受.

推荐答案

Use SvelteKit's externalFetch hook在前端和后端具有不同且被重写的API URL.

在docker compose中,如果它们位于同一docker网络中,则为the containers should be able to access each other by name.

您的前端docker SSR应该能够使用URL调用后端docker:

http://backend:8080

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

(whatever reads in your Nginx configuration files)

当然,这可能失败的原因有很多.解决这个问题的最佳方法是使用curl逐个测试URL,并在web浏览器地址中输入地址.不可能回答它失败的确切原因,因为该问题没有包含足够的信息,或者该问题通常是可重复的.

更多信息,请参阅here is our sample configuration for a dockerised SvelteKit frontend.internal backend shortcut is defined using hooks和配置变量.Here is our externalFetch example

Node.js相关问答推荐

在导入时未找到Pupeteer-PAGE-Proxy包

findoneandupdate()方法更新数据库,但其响应在请求中返回为null

模块';"; node :流程&没有导出的成员';dlopen';

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

express cors request.body formData显示undefined

如何通过node下载zip并直接解压zip?

只要我在后端正确验证所有内容,就可以将这些数据存储在本地存储中吗?

将 express js app.use() 移动到另一个文件

如何从名字,中间名,姓氏中获取全名并在结果中搜索匹配?

fastify:流过早关闭

TypeError:changeChecked 不是函数

如何正确使用 package.json 中的关键字属性?

已安装全局 NPM 包但未找到命令

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

为什么 Node 控制台不显示功能代码?

续集findbyid不是一个函数,但显然findAll是

`return function *(){...}` 是什么意思?

我可以让 node --inspect 自动打开 Chrome

将 expressjs 绑定到特定的 IP 地址