
codekitchen/dinghy-http-proxyDinghy HTTP Proxy 是 Dinghy 使用的HTTP代理和DNS服务器,基于 jwilder 的 nginx-proxy 项目修改,更适用于本地开发环境。同时集成DNS解析器,默认将所有 *.docker 域名解析到Docker虚拟机,支持自定义配置。
*.docker 域名,可通过环境变量自定义顶级域名<service>.<project>.<tld> 格式主机名适用于本地Docker开发环境,特别是需要同时运行多个项目、通过自定义域名访问容器、需要SSL加密或跨域资源共享的场景。简化本地开发中Docker容器的网络访问配置,无需手动修改hosts文件或端口映射。
代理默认使用容器暴露的第一个端口作为HTTP代理目标端口,可通过设置容器的 VIRTUAL_PORT 环境变量指定目标端口。
代理会基于Docker Compose为容器添加的标签自动生成主机名,格式为 <service>.<project>.<tld>。例如,默认 *.docker 顶级域名下,"myapp"项目中的"web"服务可通过 [***] 访问。
通过为容器设置 VIRTUAL_HOST 环境变量(可通过 docker run -e 或docker-compose的 environment 配置)指定主机名,覆盖自动生成的主机名。
支持多个虚拟主机,用逗号分隔,例如 VIRTUAL_HOST=foo.bar.com,baz.bar.com,bar.com,每个主机配置相同。还可指定端口:foo.bar.com,baz.bar.com:3000,未指定端口的主机使用默认端口。
支持前缀/后缀通配符(如 *.bar.com 或 foo.bar.*)及正则表达式(以 ~ 开头)。例如 ~^foo\.bar\..*\.xip\.io 可匹配 foo.bar.127.0.0.1.xip.io 等域名(需配合xip.io等 wildcard DNS服务)。更多说明见 nginx server_names文档。
为容器设置 CORS_ENABLED=true 环境变量,允许代理接受跨域请求。
在主机名前添加 . 前缀,使容器同时支持所有子域名访问。例如 VIRTUAL_HOST=.myrailsapp.docker 可使应用同时通过 *.myrailsapp.docker 访问。Docker Compose自动生成的主机名默认支持此功能。
将SSL证书和私钥放置在 HOME/.dinghy/certs 目录,文件名需与虚拟主机名对应,扩展名为 .crt(证书)和 .key(私钥)。例如 VIRTUAL_HOST=foo.bar.com.docker 需对应 foo.bar.com.docker.crt 和 foo.bar.com.docker.key。
HTTPS_METHOD=redirect(默认):80端口重定向到443HTTPS_METHOD=noredirect:同时支持80和443,不重定向HTTPS_METHOD=nohttp:仅支持443,禁用80端口使用 openssl 生成自签名证书:
bashopenssl req -x509 -newkey rsa:2048 -keyout foo.bar.com.docker.key \ -out foo.bar.com.docker.crt -days 365 -nodes \ -subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=foo.bar.com.docker" \ -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:foo.bar.com.docker")) \ -reqexts SAN -extensions SAN
生成后需安装到系统信任证书库以避免浏览器警告。
支持独立运行,通过环境变量自定义配置:
DOMAIN_TLD:默认 docker,DNS服务器解析的顶级域名DNS_IP:默认 127.0.0.1,DNS解析目标IP获取Docker VM IP:
docker-machine ip <machine_name>127.0.0.1启动代理容器:
bashdocker run -d --restart=always \ -v /var/run/docker.sock:/tmp/docker.sock:ro \ -v ~/.dinghy/certs:/etc/nginx/certs \ -p 80:80 -p 443:443 -p ***:***/udp \ -e DNS_IP=<vm_ip> -e CONTAINER_NAME=http-proxy \ --name http-proxy \ codekitchen/dinghy-http-proxy
/etc/resolver/docker 文件(需先创建 /etc/resolver 目录):nameserver <vm_ip> port ***
直接在Linux主机运行Docker时:
bashdocker run -d --restart=always \ -v /var/run/docker.sock:/tmp/docker.sock:ro \ -v ~/.dinghy/certs:/etc/nginx/certs \ -p 80:80 -p 443:443 -p ***:***/udp \ -e CONTAINER_NAME=http-proxy \ --name http-proxy \ codekitchen/dinghy-http-proxy
DNS配置需根据Linux发行版调整,可参考 Dory 项目。
Docker for Windows使用 127.0.0.1 作为DNS IP:
Powershell命令:
powershelldocker run -d --restart=always ` -v /var/run/docker.sock:/tmp/docker.sock:ro ` -p 80:80 -p 443:443 -p ***:***/udp ` -e CONTAINER_NAME=http-proxy ` -e DNS_IP=127.0.0.1 ` --name http-proxy ` codekitchen/dinghy-http-proxy
docker-compose配置:
yamlversion: '2' services: http-proxy: container_name: http-proxy image: codekitchen/dinghy-http-proxy environment: - DNS_IP=127.0.0.1 - CONTAINER_NAME=http-proxy ports: - "80:80" - "443:443" - "***:***/udp" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro
需手动添加主机到 C:\Windows\System32\drivers\etc\hosts,可使用Powershell脚本辅助管理(如 Carbon 或 相关Gist)。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务