如何设置 nginx-proxy 以选择正确的容器,而无需端口号



我试图在Google Compute VM上设置nginx代理。所以我希望我的域名(www.example.com)转到正确的容器。但是由于某种原因,它仅在我将端口号放在地址栏(www.example.com:3001)中时才有效,这完全违背了目的。

谁能让我知道我做错了什么?

nginx-proxy docker-compose.yml

version: '3'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - backend
networks:
  backend:
    driver: bridge

app docker-compose.yml

version: '3'
services:
  api:
    image: api-image:latest
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - 3000:8080
    networks:
      - backend
  public:
    image: app-image:latest
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - 3001:8081
    networks:
      - backend
    environment:
      - VIRTUAL_HOST=www.example.com
      - VIRTUAL_PORT=3001
networks:
  backend:
    driver: bridge

因此,当我放置 www.example.com:3001 时,上述内容正确地代理到public容器。

想法??谢谢!

您已在 2 个文件中定义了此块。

networks:
  backend:
    driver: bridge

看似是同一个网络,但事实并非如此。如果docker network ls,您将看到 2 个网络,其项目名称作为前缀。

将其更改为:

networks:
  backend:
    external: true

并手动创建网络 docker network create backend

最新更新