Docker 如何在不需要端口号的情况下设置nginx代理以选择正确的容器

Docker 如何在不需要端口号的情况下设置nginx代理以选择正确的容器,docker,docker-compose,google-compute-engine,jwilder-nginx-proxy,Docker,Docker Compose,Google Compute Engine,Jwilder Nginx Proxy,我正在尝试在Google Compute虚拟机上设置nginx代理。因此,我希望我的域名(www.example.com)转到正确的容器。但出于某种原因,只有当我把端口号放在地址栏(www.example.com:3001)中时,它才起作用,这完全违背了目的 有人能告诉我我做错了什么吗 nginx代理docker-compose.yml version: '3' services: nginx-proxy: image: jwilder/nginx-proxy ports:

我正在尝试在Google Compute虚拟机上设置nginx代理。因此,我希望我的域名(www.example.com)转到正确的容器。但出于某种原因,只有当我把端口号放在地址栏(www.example.com:3001)中时,它才起作用,这完全违背了目的

有人能告诉我我做错了什么吗

nginx代理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

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

应用程序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

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
,您将看到两个以项目名称为前缀的网络

将其更改为:

networks:
  backend:
    external: true
并使用手动创建网络
docker network create backend

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

networks:
  backend:
    driver: bridge
看起来是同一个网络,但事实并非如此。如果您
docker network ls
,您将看到两个以项目名称为前缀的网络

将其更改为:

networks:
  backend:
    external: true
并使用手动创建网络
docker网络创建后端