0

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

首先,我nexus.mydomain.com使用 Let's Encrypt 证书使 maven 部分像 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,但没有成功。有什么线索吗?

4

1 回答 1

-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
于 2019-07-27T18:19:18.047 回答