我在我的项目中使用了码头构图。它包括以下集装箱:
我使用SvelteKit的Load function向后端发送请求。简而言之,它将http request发送到client-side或server-side上的backend容器。这意味着,请求不仅可以通过浏览器发送,还可以通过容器本身发送。
我不能让它在客户端和服务器端都能工作。他们中只有一个在工作。
我试过这些网址:
http://api.localhost/articles (只有client-side请求才能工作)http://api.host.docker.internal/articles (只有server-side请求才能工作)http://backend:8080/articles (只有server-side请求才能工作)我知道这个错误:
来自SvelteKit:FetchError: request to http://api.localhost/articles failed, reason: connect ECONNREFUSED 127.0.0.1:80
来自Nginx:超时错误
Docker-compose.yml文件:
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被其他容器访问。
发布于 2022-07-02 13:01:28
使用SvelteKit的externalFetch钩子在前端和后端具有不同的和重写的API。
在码头-组成,容器应该能够按名称相互访问。如果他们是在同一个码头网络。
您的前端停靠器SSR应该能够通过使用URL调用后端停靠程序:
http://backend:8080Web浏览器应该能够通过使用URL调用后端:
(whatever reads in your Nginx configuration files)当然,这可能失败的原因有很多。解决这个问题的最好方法是一个接一个地测试curl,一个服务器一个服务器地使用curl并将地址输入到web浏览器地址。它不可能回答失败的确切原因,因为这个问题没有包含足够的信息,或者这个问题通常是可重复的。
欲了解更多信息,请访问下面是我们对一个已编辑的SvelteKit前端的示例配置。内部后端快捷方式使用钩子定义。和配置变量。下面是我们的externalFetch示例。
发布于 2022-07-01 20:44:15
您可以使用dns (您在撰写文件中给出的服务名称)从一个容器中卷曲。
CURL -XGET backend:8080您也可以通过在主机驱动程序网络上运行所有这些容器来实现这一点。
关于http://api.localhost/articles
您可以更改/etc/hosts
并指定当使用此url:http://api.localhost/articles时,您希望计算机尝试与之通信的IP。
https://stackoverflow.com/questions/72834263
复制相似问题