正确的码头码头工人撰写

时间:2019-03-01 18:39:25

标签: spring docker docker-compose

我一般不熟悉docker compose和docker,因此我在测试一个小例子。

我要解决的问题是如何具有动态端点,以便在本地运行时,从前端向var res = b.Where(x => a.Any(y => y.Contains(x)); 之类的地方进行http调用,但是当我在这些容器上运行这些容器时数字海洋进入localhost:8080/getPeople。我以为那是docker-compose的要点之一,我只是在这里遗漏了一些东西。这是我的撰写文件。

myDomain:8080/getPeople

1 个答案:

答案 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来配置反向代理转发规则。