使用jwilder / nginx-proxy在同一容器的不同端口上运行虚拟主机

时间:2016-09-06 16:41:09

标签: nginx docker reverse-proxy jwilder-nginx-proxy

我正在尝试在jwilder / nginx-proxy后面运行sonatype / nexus3,并将其用作maven和docker私有repo。 我想将nxx代理nexus子域代理到nexus容器的端口8081,并将docker子域代理到同一容器的端口8082。这可能吗?

首先,我使用Let的加密证书使maven部分在没有问题的情况下使用nexus.mydomain.com而不是TSL:

docker run --restart=always --name nginx -d -p 80:80 -p 443:443 -v /root/certs/:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

docker run --restart=always -d -p 8081:8081 --name nexus -e VIRTUAL_HOST=nexus.mydomain.com -v /root/nexus-data:/nexus-data sonatype/nexus3

然后我意识到为了让docker私有存储库运行,我需要使用一个额外的端口。所以我在端口8082上创建了docker repo,并使用保存的配置重新创建了容器,暴露了新端口和一个额外的子域:

docker run --restart=always -d -p 8081:8081 -p 8082:8082 --name nexus -e VIRTUAL_HOST=nexus.mydomain.com,docker.mydomain.com -v /root/nexus-data:/nexus-data sonatype/nexus3

我尝试覆盖在/etc/nginx/vhost.d上挂载卷的nginx配置但没有成功。有线索吗?

1 个答案:

答案 0 :(得分:0)

因为jwilder / nginx-proxy可以关闭容器,每个容器一个端口。您可以更新nginx-proxy模板,也可以使用两个带有socat的容器来将tcp通信代理到适当的端口。

我将端口8082更改为5000(这是docker注册表的标准设置)

请参见示例docker-compose.yml

version: '2'


services:

  nexus:
    image: sonatype/nexus3
    expose:
      - "8081"
      - "5000"
    environment:
      - VIRTUAL_HOST=nexus.example.com
      - VIRTUAL_PORT=8081


  registry:
    restart: always
    image: alpine/socat
    expose:
      - "5000"
    command: TCP4-LISTEN:5000,fork TCP:nexus:5000
    environment:
      - VIRTUAL_HOST=registry.example.com
      - VIRTUAL_PORT=5000
相关问题