Nginx Docker反向代理到子域

Nginx Docker反向代理到子域,nginx,docker,proxy,Nginx,Docker,Proxy,我试图使用jwilder/nginx代理docker映像作为另外两个容器的反向代理,其中一个运行tomcat,另一个运行grav。我希望它们被代理到不同的子域,这不应该引起冲突 我想要的是: version: "2" services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80"

我试图使用jwilder/nginx代理docker映像作为另外两个容器的反向代理,其中一个运行tomcat,另一个运行grav。我希望它们被代理到不同的子域,这不应该引起冲突

我想要的是:

version: "2"
services:
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
            - "80:80"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/tmp/docker.sock:ro

    tomcat:
        image: tomcat:8.5.15-jre8
        container_name: tomcat
        environment:
            - VIRTUAL_HOST=appserver.domain.com
            - VIRTUAL_PORT=8080

    grav:
        image: garywiz/docker-grav
        container_name: grav
        environment:
            - VIRTUAL_HOST=www.domain.com,domain.com
            - VIRTUAL_PORT=8080
  • Grav通过端口80在www.domain.com上提供
  • Tomcat可通过端口8080在appserver.domain.com上获得
  • 在端口80上运行另一个应用程序的能力指向另一个子域
目前,两个容器都使用8080端口,如命令
docker ps-a
所示

以下是我当前的docker-compose.yml:

nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
        - "80:80"
    volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro

tomcat:
    image: tomcat:8.5.15-jre8
    container_name: tomcat
    environment:
        - VIRTUAL_HOST=appserver.domain.com
        - VIRTUAL_PORT=8080
#    ports:
#        - "8080:8080"

grav:
    image: garywiz/docker-grav
    container_name: grav
    environment:
        - VIRTUAL_HOST=www.domain.com
        - VIRTUAL_PORT=80
 #   ports:
 #       - "80:8080"
    #expose:
    #    - 8080
    #    - 80

other:
    image: other
    container-name: other
    environment:
    - VIRTUAL_HOST=other.domain.com
    - VIRTUAL_PORT=80
有人能帮忙吗

更新:

我将docker-compose.yml更改为以下内容:

version: "2"
services:
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports:
            - "80:80"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/tmp/docker.sock:ro

    tomcat:
        image: tomcat:8.5.15-jre8
        container_name: tomcat
        environment:
            - VIRTUAL_HOST=appserver.domain.com
            - VIRTUAL_PORT=8080

    grav:
        image: garywiz/docker-grav
        container_name: grav
        environment:
            - VIRTUAL_HOST=www.domain.com,domain.com
            - VIRTUAL_PORT=8080
这两个容器现在似乎都可以通过端口80使用,而不是通过“传统”端口8080使用tomcat。这是基于我的配置文件的预期行为吗


Jason

不确定这是否对您有帮助,因为这是一个非常简单的POC,只需几个index.html就可以模拟两个不同的项目。尽管如此,也许通过一些努力,你可以让它为你的案件工作。诀窍是让另一个容器作为反向代理运行nginx,该容器可以访问其他容器。这里有代码,可能特性/生产部署分支在非本地环境中更有用

我写了一篇文章详细解释了这一点,但它是用西班牙语写的。 我是从你那里得到这个主意的


希望可以帮助您。

您是否在docker-compose.yml中使用
版本:“2”
?另外,不允许grav侦听端口
8080
而不是80。Nginx只看到它的8080端口。不,作为一个新手,我没有意识到版本之间有差异。有一次,我看到他们上来了,但都在80号端口。我发布了最新消息。