通过traefik访问3000端口的容器

Accessing container on port 3000 thru traefik

好的,我有一个 node-js 应用程序,我想通过 traefik 访问它。

node-js 应用程序在端口 3000

上运行

按照入门页面的 test-it 说明,我得到了 traefik 运行。

docker-compose.yml

version: '2'
services:

  app:
    build:
      context: .
      dockerfile: docker/app/Dockerfile
    environment:
      - NODE_ENV=development
      - NODE_PORT=3000
    volumes:
      - ./app:/app
    expose:
      - "3000"
    networks:
      - web
    labels:
      - "traefik.backend=microservice"
      - "traefik.backend.port=3000"
      - "traefik.port=3000"
      - "traefik.frontend.rule=Host:microservice.docker.localhost"
networks:
  web:
    external:
      name: traefik_webgateway

正在尝试连接:

curl -H Host:microservice.docker.localhost http://localhost/

Bad Gateway

curl -H Host:microservice.docker.localhost http://localhost:3000/

curl: (52) Empty reply from server

但是 curl -H Host:whoami.docker.localhost http://localhost/ 工作正常。

问题是我的微服务必须监听 localhost:3000 而不是我将其更改为 0.0.0.0:3000 并且它工作得很好。

docker-compose.yml

中删除了 - "traefik.backend.port=3000"

127.0.0.1 microservice.docker.localhost 添加到 /etc/hosts

这让我能够:

curl http://microservice.docker.localhost/ 并得到我期待的响应

I'm a microservice!