mwaeckerlin/reverse-proxy该镜像为一款轻量级反向代理,设计用于Docker Swarm、Kubernetes等云环境。它监听单个端口的HTTP和HTTPS请求,根据URL(域名和/或路径)将请求转发至内部不可见服务器,或重定向至其他公开URL。镜像高度优化,仅包含nginx(Web服务器)、inotifywait(证书变更监控)和run-nginx(协调程序)三个可执行文件,无shell环境,体积约10MB(含配置)。支持SSL证书自动重载,当/etc/letsencrypt/live目录中证书文件变更时,反向代理会立即 reload 并应用新证书。
注意:配置方式已变更,旧版本用户需迁移。当前配置在构建时生成并包含在镜像中,通过构建参数而非文件、变量或容器链接分析进行配置。
inotifywait监控证书文件变化,实时 reload nginx 以应用新证书反向代理监听以下端口:
8080:HTTP协议8443:HTTPS协议反向代理支持两种工作模式,配置均需在构建时通过构建参数完成,需创建自定义docker-compose.yaml定义配置:
构建时参数FORWARD用于配置请求转发规则,每行定义一条规则,格式为外部源URL 内部目标URL。外部源URL为公开可访问地址,内部目标URL为云环境内部服务地址(非公开)。
构建时参数REDIRECT用于配置URL重定向规则,每行定义一条规则,格式为源URL 目标URL。源URL和目标URL均需为公开可访问地址,所有对源URL的请求将重定向至目标URL。
构建时参数SSL可设为off以禁用HTTPS。
以下为docker-compose.yaml配置片段,展示转发和重定向规则配置:
yamlreverse-proxy: image: mwaeckerlin/reverse-proxy ports: - 8080:8080 build: context: . args: SSL: "off" # 禁用HTTPS FORWARD: |- # 转发规则:外部URL 内部服务URL localhost localserver:8080 demo demo:8080 test test:8080 lokal lokal:8080 doesnotrun doesnotrun:8080 REDIRECT: |- # 重定向规则:源URL 目标URL extern pacta.swiss
修改本地 hosts 文件:添加以下条目以解析测试域名:
127.0.0.1 localhost demo test lokal extern doesnotrun
构建并启动容器:
bashdocker-compose build docker-compose up
测试访问:
http://localhost:8080:转发至 localserver:8080[***]:转发至 demo:8080[***]:转发至 test:8080[***]:未找到(404错误)[***]:显示维护页面[***]:重定向至 pacta.swiss通过与mwaeckerlin/letsencrypt容器共享卷实现SSL证书管理,两容器需共享/etc/letsencrypt(证书存储)和/acme(Let's Encrypt验证目录)卷。证书文件变更时,反向代理自动 reload 应用新证书。
以下为集成Let's Encrypt的docker-compose.yaml完整配置,包含权限修复、反向代理、证书申请和业务服务:
yamlversion: '3.5' services: # 修复卷权限:确保letsencrypt可写入证书目录 fix-permission: image: mwaeckerlin/very-base command: - '/bin/sh' - '-c' - '$${ALLOW_USER} /etc/letsencrypt /acme' volumes: - type: volume source: certificates target: /etc/letsencrypt - type: volume source: acme target: /acme # 反向代理服务 reverse-proxy: image: mwaeckerlin/reverse-proxy build: context: . args: SSL: "on" # 启用HTTPS FORWARD: |- # 转发规则:外部域名 内部服务 example-service.example.com example-service:4000 depends_on: - fix-permission ports: - '80:8080' # 映射主机80端口至容器HTTP端口 - '443:8443' # 映射主机443端口至容器HTTPS端口 networks: - proxy-letsencrypt - proxy-example-service volumes: - type: volume source: certificates target: /etc/letsencrypt # 共享证书目录 - type: volume source: acme target: /acme # 共享Let's Encrypt验证目录 # Let's Encrypt证书申请服务 letsencrypt: image: mwaeckerlin/letsencrypt depends_on: - fix-permission - reverse-proxy environment: *** '***' # 证书联系人*** DOMAINS: 'example-service.example.com' # 需申请证书的域名 PREFIXES: '' networks: - proxy-letsencrypt volumes: - type: volume source: certificates target: /etc/letsencrypt - type: volume source: acme target: /acme deploy: restart_policy: condition: on-failure # 失败时重启 delay: 1h # 每小时尝试一次(避免频繁失败被封禁) # 示例业务服务 example-service: image: ***.dkr.ecr.eu-central-2.amazonaws.com/example-service depends_on: - example-db environment: APIKEY: APIHOST: APISECRET: DB_TYPE: postgresql DB_NAME: database DB_HOST: example-db DB_USER: user DB_PASSWORD: DB_PORT: 5432 networks: - proxy-example-service - example-db-network deploy: restart_policy: condition: on-failure # 示例数据库服务 example-db: image: postgres:15 environment: POSTGRES_PASSWORD: POSTGRES_USER: user POSTGRES_DB: database volumes: - type: volume source: db-volume target: /var/lib/postgresql/data networks: - example-db-network deploy: restart_policy: condition: on-failure volumes: db-volume: {} # 数据库数据卷 certificates: {} # 证书存储卷 acme: {} # Let's Encrypt验证卷 networks: example-db-network: driver_opts: encrypted: 1 # 加密网络 proxy-letsencrypt: driver_opts: encrypted: 1 proxy-example-service: driver_opts: encrypted: 1
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务