【问题标题】:Running virtual hosts on different ports of the same container using jwilder/nginx-proxy使用 jwilder/nginx-proxy 在同一容器的不同端口上运行虚拟主机
【发布时间】:2016-09-06 16:41:09
【问题描述】:

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

首先,我使用 Let's Encrypt 证书将 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

我尝试覆盖 nginx 配置,在 /etc/nginx/vhost.d 上安装卷,但没有成功。有什么线索吗?

【问题讨论】:

  • 我很困惑为什么你将端口发布到你的 nexus 容器并且试图通过 nginx-proxy 连接到它。
  • 有这方面的消息吗?

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


【解决方案1】:

因为 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

【讨论】:

    猜你喜欢
    • 2016-04-08
    • 2018-09-20
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2011-08-29
    • 2021-05-03
    • 2016-05-02
    • 2012-03-27
    相关资源
    最近更新 更多