如何为现有Node.js Dockerfile添加Varnish缓存并解决构建无Varnish输出问题
问题原因说明
你当前的操作不正确,核心问题是:Docker 推荐单进程单容器的设计原则,Varnish 不需要整合进你的 Node 服务镜像,也不需要修改原有的 Node 服务 Dockerfile。你没有在 docker-compose.yml 中定义 Varnish 相关服务,因此执行 docker compose build 时只会构建配置中存在的 Node 服务,自然不会出现 Varnish 相关构建日志。
整合步骤
1. 保留原有 Node 服务 Dockerfile
你现有的 Dockerfile 无需修改,保持原有内容即可。
2. 新增 Varnish 配置文件
在项目根目录新建 default.vcl 配置文件,示例内容如下,可根据实际缓存需求调整规则:
vcl 4.1; # 定义后端Node服务 backend default { .host = "node"; # 此处对应docker-compose中node服务的名称 .port = "8080"; # 对应Node服务暴露的端口 } # 其余自定义缓存规则按需添加
3. 编写 docker-compose.yml 配置
在项目根目录新建/修改 docker-compose.yml,同时定义 Node 和 Varnish 两个服务:
version: '3' services: # 你的Node应用服务 node: build: . expose: - "8080" restart: unless-stopped # Varnish缓存服务 varnish: image: manios/varnish:latest ports: - "80:80" # 宿主机80端口映射到Varnish的80端口,可按需修改 volumes: - ./default.vcl:/etc/varnish/default.vcl # 挂载自定义配置 environment: - VARNISH_HTTP_PORT=80 - VARNISH_SIZE=256M # 缓存大小可按需调整 depends_on: - node restart: unless-stopped
4. 执行启动命令
修改完配置后执行以下命令即可完成构建启动:
docker compose up -d --build
此时构建日志会出现 Varnish 镜像拉取、服务启动的相关内容,直接访问宿主机的 80 端口就会经过 Varnish 缓存转发到 Node 服务。
内容的提问来源于stack exchange,提问作者Prabhakaran
相关产品推荐
相关产品推荐

