
library/varnishVarnish Docker 社区
Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow
fresh, 8.0.0, 8, 8.0, latestfresh-alpine, 8.0.0-alpine, 8-alpine, 8.0-alpine, alpineold, 7.7.3, 7.7old-alpine, 7.7.3-alpine, 7.7-alpinestable, 6.0.16, 6.0[***]
(更多信息)
amd64、arm32v7、arm64v8、i386、ppc64le、s390x
repo-info 仓库的 repos/varnish/ 目录(历史记录)
(包含镜像元数据、传输大小等信息)
official-images 仓库的 library/varnish 标签
official-images 仓库的 library/varnish 文件(历史记录)
docs 仓库的 varnish/ 目录(历史记录)
Varnish 是一款 HTTP 加速器,专为内容密集型动态网站和 API 设计。与其他 Web 加速器(如最初作为客户端缓存的 Squid,或主要作为源服务器的 Apache、nginx)不同,Varnish 从设计之初就专注于 HTTP 加速,且仅支持 HTTP 协议,不像其他代理服务器常支持 FTP、SMTP 等多种网络协议。
来源:***.org/wiki/Varnish_(software))
VARNISH_BACKEND_HOST 和 VARNISH_BACKEND_PORT只需指定后端服务(即 Varnish 要加速的服务器)的地址和端口:
console# 定义后端服务的地址和端口 # 工作目录需挂载为 tmpfs 以避免磁盘 I/O # 容器内部监听 80 端口,外部映射到 8080 端口 $ docker run \ -e VARNISH_BACKEND_HOST=example.com -e VARNISH_BACKEND_PORT=80 \ --tmpfs /var/lib/varnish/varnishd:exec \ -p 8080:80 \ varnish
运行后,访问 localhost:8080 即可看到 example.com 的主页。
若已有 VCL 配置文件,可直接将其挂载为 /etc/varnish/default.vcl:
console# 将本地 VCL 文件挂载到容器内的 /etc/varnish/default.vcl(只读) # 工作目录挂载为 tmpfs,外部端口 8080 映射到容器 80 端口 $ docker run \ -v /path/to/default.vcl:/etc/varnish/default.vcl:ro \ --tmpfs /var/lib/varnish/varnishd:exec \ -p 8080:80 \ varnish
也可通过 Dockerfile 将 VCL 文件打包进新镜像:
dockerfileFROM varnish COPY default.vcl /etc/varnish/
将上述 Dockerfile 与 default.vcl 放在同一目录,执行 docker build -t my-varnish . 构建镜像,然后启动容器:
console$ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 my-varnish
所有镜像均内置 varnishreload 工具,支持在不重启容器(从而不丢失缓存)的情况下更新配置。基础用法如下:
console# 将新的 VCL 文件复制到运行中的容器 docker cp new_default.vcl running_container:/etc/varnish/default.vcl # 执行配置重载 docker exec running_container varnishreload
varnishreload 还支持重载其他文件、标签(-l)、清理旧标签(-m)等功能。查看完整用法:
consoledocker run varnish varnishreload -h
VARNISH_SIZE)默认缓存大小为 100MB(通常偏小),可通过 VARNISH_SIZE 环境变量调整:
console# 设置缓存大小为 2GB $ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish
VARNISH_HTTP_PORT/VARNISH_PROXY_PORT)VARNISH_HTTP_PORT:HTTP 流量监听端口,默认 80,可自定义。VARNISH_PROXY_PORT:PROXY 协议监听端口,默认 8443(与 hitch 镜像默认端口一致)。console# 让 Varnish 监听 7777 端口(而非默认 80) $ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:7777 -e VARNISH_HTTP_PORT=7777 varnish
VARNISH_VCL_FILE)默认 VCL 配置文件路径为 /etc/varnish/default.vcl,可通过 VARNISH_VCL_FILE 环境变量修改。适用于需要内置多种配置的场景。
在 docker run 命令中,varnish 后的参数若以 - 开头,会追加到默认启动命令后:
console# 延长默认缓存保留时间 $ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish -p default_keep=300
若参数不以 - 开头,则会覆盖默认启动命令:
console# 查看 varnishd 命令行选项 $ docker run varnish varnishd -? # 列出可通过 -p 设置的参数 $ docker run varnish varnishd -x parameter # 自定义参数启动(需添加 -F 确保非后台运行) $ docker run varnish varnishd -F -a :8080 -b 127.0.0.1:8181 -t 600 -p feature=+http2
7.1 及以上版本镜像已包含 vmod_dynamic(用于后端解析)和 varnish-modules 集合。此外,镜像提供 install-vmod 脚本,方便在构建自定义镜像时编译安装 vmod。
dockerfileFROM varnish:7.1 # 切换到 root 用户并安装构建依赖 USER root RUN set -e; \ apt-get update; \ apt-get -y install $VMOD_DEPS /pkgs/*.deb; \ \ # 安装一个或多个 vmod(示例为 varnish-modules) install-vmod [***]; \ \ # 清理依赖并切换回 varnish 用户 apt-get -y purge --auto-remove $VMOD_DEPS varnish-dev; \ rm -rf /var/lib/apt/lists/* USER varnish
dockerfileFROM varnish:7.1-alpine # 安装构建依赖 USER root RUN set -e; \ apk add --no-cache $VMOD_DEPS; \ \ # 安装一个或多个 vmod(示例为 varnish-modules) install-vmod [***]; \ \ # 清理依赖 apk del --no-network $VMOD_DEPS USER varnish
varnish:<version>默认镜像,适用于大多数场景。可直接作为临时容器运行(挂载配置文件启动),或作为基础镜像构建自定义镜像。
varnish:<version>-alpine基于 Alpine Linux(alpine 官方镜像)构建,镜像体积极小(约 5MB 基础镜像),适合对镜像大小有严格要求的场景。
注意:Alpine 使用 musl libc 而非 glibc,部分依赖 glibc 的软件可能运行异常。此外,为精简体积,通常不包含 git、bash 等工具,需在自定义 Dockerfile 中手动安装(参考 Alpine 镜像文档)。
镜像中软件的许可证信息参见 varnish-cache 仓库。
与所有 Docker 镜像一样,本镜像可能包含基础系统(如 Bash)及依赖软件的其他许可证。自动检测到的额外许可证信息可在 repo-info 仓库的 varnish/ 目录 查看。
使用前请确保遵守所有包含软件的许可证要求。



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