我一般不熟悉docker compose和docker,因此我在测试一个小例子。
我要解决的问题是如何具有动态端点,以便在本地运行时,从前端向var res = b.Where(x => a.Any(y => y.Contains(x));
之类的地方进行http调用,但是当我在这些容器上运行这些容器时数字海洋进入localhost:8080/getPeople
。我以为那是docker-compose的要点之一,我只是在这里遗漏了一些东西。这是我的撰写文件。
myDomain:8080/getPeople
答案 0 :(得分:0)
这是一个使用reverse proxy的设置,因此您可以使用相对url(而不是在网页中弄乱域名),并且还具有解决CORS问题的优点同时向您的后端进行ajax调用。
如果您不熟悉反向代理,只需知道所有HTTP请求都应首先命中反向代理,并且反向代理将负责按照一组规则将这些HTTP请求转发到正确的HTTP服务器。
在docker世界中,一个非常方便的反向代理是Traefik。以下是具有反向代理,前端和后端的docker compose项目的示例:
index.html:
<!DOCTYPE html>
<html>
<body>
<h2>post a form to backend</h2>
<form action="/api/post" method="post">
<input type="text">
<input type="submit">
</form>
<h2>ajax call to backend</h2>
<button onclick="fetch('/api/json').then(response => response.text()).then(txt => document.getElementById('ajaxresponse').textContent = txt)">click me to make a ajax call to /api/json</button>
<pre id="ajaxresponse"></pre>
</body>
</html>
docker-compose.yml:
version: "3"
services:
reverseproxy: # see https://docs.traefik.io/#the-traefik-quickstart-using-docker
image: traefik
command: --docker
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
backend:
image: kennethreitz/httpbin # see https://httpbin.org
command: ["gunicorn", "-b", "0.0.0.0:8080", "httpbin:app", "-k", "gevent"]
expose:
- 8080
depends_on:
- reverseproxy
labels:
traefik.frontend.rule: PathPrefixStrip:/api
traefik.port: 8080
frontend:
image: nginx
volumes:
- ./index.html:/usr/share/nginx/html/index.html:ro
expose:
- 80
depends_on:
- reverseproxy
- backend
labels:
traefik.frontend.rule: PathPrefixStrip:/
traefik.port: 80
将Traefik与docker结合使用时,您可以通过向您的docker容器添加labels来配置反向代理转发规则。