You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容器化Varnish服务出现Service Unavailable错误排查求助

问题描述

原本在dev容器内正常运行的Varnish服务,单独容器化后无法正常工作。请求流转路径应为:https://loadwebsite.com -> dev容器 -> dev-varnish容器 -> dev容器,浏览器返回503错误:

Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.


相关配置文件

varnish.local.php

<?php
return [
    'acsi_varnish' => [
        'clients' => [
            'cache' => [
                'endpoint' => [
                    'host' => 'dev-varnish',
                    'port' => '8443',
                    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
                ],
            ],
        ],
    ],
];

default.vcl

vcl 4.1;

backend default {
    .host = "dev";
    .port = "8080";
}

docker-compose-template.yml

version: '3.7'
services:
  dev:
    image: dev:centos7
    container_name: dev
    hostname: dev
    volumes:
      - ${HOST_BIND_MOUNT_DIR}:${CONTAINER_MOUNT_DIR}
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    privileged: true
    networks:
      dev-online:
        ipv4_address: 172.100.0.2
    ports:
      - 443:443
#     - 6082:6082
      - 9001:9001
      - 5672:5672
      - 15672:15672
      - 29015:29015
    extra_hosts:
      - dev:127.0.0.1
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-varnish:172.100.0.10

  dev-mysql:
    image: dev-mysql-5.7:latest
    container_name: dev-mysql
    hostname: dev-mysql
    user: "${V_UID}:${V_GID}"
    volumes:
      - ${HOST_BIND_MOUNT_DIR_MYSQL}:${CONTAINER_MOUNT_DIR_MYSQL}
    networks:
      dev-online:
        ipv4_address: 172.100.0.3
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD:${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE:${MYSQL_DATABASE}
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:127.0.0.1
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-mongo-3:
    image: mongo-3.0:dev
    container_name: dev-mongo-3
    hostname: dev-mongo-3
    volumes:
      - ${HOST_BIND_MOUNT_DIR_MONGO_3}:${CONTAINER_MOUNT_DIR_MONGO}
    privileged: true
    networks:
      dev-online:
        ipv4_address: 172.100.0.4
    ports:
      - 27017:27017
    environment:
      - MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}"
      - MYSQL_DATABASE="${MYSQL_DATABASE}"
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:127.0.0.1
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-mongo-4:
    image: mongo-4.4:dev
    container_name: dev-mongo-4
    hostname: dev-mongo-4
    user: "${V_UID}:${V_GID}"
    volumes:
      - ${HOST_BIND_MOUNT_DIR_MONGO_4}:${CONTAINER_MOUNT_DIR_MONGO}
    privileged: true
    networks:
      dev-online:
        ipv4_address: 172.100.0.5
    ports:
      - 27018:27017
    environment:
      - MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}"
      - MYSQL_DATABASE="${MYSQL_DATABASE}"
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:127.0.0.1
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-solr-6:
    image: solr-6.6:dev
    container_name: dev-solr-6
    hostname: dev-solr-6
    networks:
      dev-online:
        ipv4_address: 172.100.0.6
    ports:
      - 8983:8983
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:127.0.0.1
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-solr-8:
    image: solr-8.6:dev
    container_name: dev-solr-8
    hostname: dev-solr-8
    user: "${V_UID}:${V_GID}"
    volumes:
      - ${HOST_BIND_MOUNT_DIR_SOLR}:${CONTAINER_MOUNT_DIR_SOLR_8}
    networks:
      dev-online:
        ipv4_address: 172.100.0.7
    ports:
      - 8984:8983
    environment:
      - SOLR_HEAP=2g
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:127.0.0.1
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-rethinkdb:
    image: rethinkdb
    container_name: dev-rethinkdb
    hostname: dev-rethinkdb
    user: "${V_UID}:${V_GID}"
    volumes:
      - ${HOST_BIND_MOUNT_DIR_RETHINKDB}:${CONTAINER_MOUNT_DIR_RETHINKDB}
    networks:
      dev-online:
        ipv4_address: 172.100.0.8
    ports:
      - 28015:28015
      - 8080:8080
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:127.0.0.1
      - dev-memcached:172.100.0.9
      - dev-varnish:172.100.0.10

  dev-memcached:
    image: memcached
    container_name: dev-memcached
    hostname: dev-memcached
    user: "${V_UID}:${V_GID}"
    networks:
      dev-online:
        ipv4_address: 172.100.0.9
    ports:
      - 11211:11211
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-memcached:127.0.0.1
      - dev-varnish:172.100.0.10

  dev-varnish:
    image: varnish:7.2.1-alpine
    container_name: dev-varnish
    hostname: dev-varnish
    user: '0'
    volumes:
      - "./default.vcl:/etc/varnish/default.vcl"
    ports:
      - "6082:8443"
    tmpfs:
      - /var/lib/varnish/varnishd:exec
    networks:
      dev-online:
        ipv4_address: 172.100.0.10
    extra_hosts:
      - dev:172.100.0.2
      - dev-mysql:172.100.0.3
      - dev-mongo-3:172.100.0.4
      - dev-mongo-4:172.100.0.5
      - dev-solr-6:172.100.0.6
      - dev-solr-8:172.100.0.7
      - dev-rethinkdb:172.100.0.8
      - dev-varnish:127.0.0.1
      - dev-memcached:172.100.0.9

networks:
  dev-online:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.100.0.0/24

排查与解决步骤

1. 端口配置不匹配

  • 从varnish.local.php看,dev容器连接dev-varnish用的是8443端口,但Varnish默认监听80(HTTP)和6082(管理端口),你的docker-compose把宿主机6082映射到容器8443,但Varnish容器根本没配置开启8443的HTTPS服务。
  • 要么修改varnish.local.php里的端口为6081(Varnish默认HTTP端口),要么给Varnish容器配置SSL证书并开启8443端口。

2. 后端连接验证

  • Varnish的default.vcl配置后端是dev容器的8080端口,但dev容器的端口映射里没暴露8080,先确认dev容器内的服务确实在8080监听。
  • 进入dev-varnish容器,执行curl http://dev:8080,看能否正常访问后端服务,如果不通,说明网络或后端服务有问题。

3. Varnish启动参数修正

  • 默认Varnish启动命令没指定正确的监听端口,你映射了8443但容器没开这个端口。需要在docker-compose的dev-varnish服务里添加command参数:
    command: varnishd -f /etc/varnish/default.vcl -a :80 -T :6082
    
    如果要开启HTTPS,需额外配置SSL,比如:
    command: varnishd -a :443,ssl,http2 -f /etc/varnish/default.vcl -T :6082 -S /etc/varnish/secret -w 2,50,300
    
    同时挂载SSL证书文件到容器内。

4. 容器网络连通性检查

  • 在dev容器里执行ping dev-varnish,在dev-varnish容器里执行ping dev,确认双向网络连通。
  • 在dev容器里执行curl http://dev-varnish:6081(默认HTTP端口),检查能否访问Varnish服务。

5. 查看Varnish日志定位问题

  • 进入dev-varnish容器,执行varnishlog,实时查看请求日志,能直接看到请求失败的具体原因(比如后端连接超时、端口不通等)。

内容的提问来源于stack exchange,提问作者Rajsekar Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:05:19