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

时间:2019-01-09 12:13:35

标签: docker docker-compose google-compute-engine jwilder-nginx-proxy

我正在尝试在Google Compute VM上设置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

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容器。

想法?谢谢!

1 个答案:

答案 0 :(得分:2)

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

networks:
  backend:
    driver: bridge

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

将其更改为:

networks:
  backend:
    external: true

并使用以下命令手动创建网络 docker network create backend