准备阶段

按照 clamav 官方描述,它的 docker 镜像有两种,一种是 clamav/clamav:<version>​,另一种是 clamav/clamav:<version>_base​,这两种镜像的主要区别如下

  • ​clamav/clamav:<version>​:预先将病毒库一起打包进容器内的发行版,容器启动后不需要下载太多数据

  • ​clamav/clamav:<version>_base​:没有预先将病毒库打包进容器,用户可以自己将准备好的病毒库挂载进容器,或者让容器启动后将病毒库下载

这里我们使用预先打包了病毒库的镜像 clamav/clamav:<version>​

使用科学方式,拉取镜像

docker pull clamav/clamav:1.4.2

简单的启动命令如下

docker run -itd -p 3310:3310 --name clamav clamav/clamav:1.4.2

上面命令启动后,它会使用镜像里面的配置文件以及病毒库来启动

在正式部署 clamav 前,我们还有两个步骤要做

1、准备病毒库

当然,如果你自己早就已经准备好了病毒库,那就不用再折腾这一步了

正常情况下我们希望能够在后续使用我们自己准备的病毒库来给它启动,但目前我们并没有准备好自己的病毒库,所以需要将镜像里面的病毒库复制到宿主机,然后再挂载进容器中

先使用上面那条命令启动容器,然后再将容器中的 /var/lib/clamav 这个目录里面的文件复制到宿主机

mkdir ./data
docker cp clamav:/var/lib/clamav/* ./data

这样我们就得到了一份病毒库

2、准备 clamav 配置文件

clamav 容器中的配置文件存放在 /etc/clamav,我们一样先将这些配置文件复制到宿主机

mkdir config
docker cp clamav:/etc/clamav/* ./config

修改部分配置文件

从 clamav 复制出来的配置有下面文件

# 邮件告警配置,.sample 后缀的是示例
clamav-milter.conf
clamav-milter.conf.sample

# clamav服务配置,.sample 后缀的是示例
clamd.conf
clamd.conf.sample

# 病毒库更新配置,.sample 后缀的是示例
freshclam.conf
freshclam.conf.sample

打开 clamd.conf ,找到下面这些配置,修改成下面这些值

# 打印日志时也打印时间
LogTime yes
# 绑定ip
TCPAddr 0.0.0.0
# 流式提交文件时,数据量超过这个设置,则直接断开连接,默认100m,这个值的设置范围要符合MTA(Microsoft Teams)对单个附件的大小限制
StreamMaxLength 1024M
# 最大线程数,默认是10,可以根据自己服务器资源配置
MaxThreads 5
# 设置每个文件扫描最大数据量,0表示不限制,默认400M,根据自己的业务设置
MaxScanSize 1024M
# 大于这个大小的文件,不会被扫描,默认是100m,根据自己业务设置
MaxFileSize 1024M

打开 freshclam.conf,找到下面这些配置,修改成下面这些值

# 记录每条消息的时间
LogTime yes
# 启用详细日志记录
LogVerbose yes
# 使用系统日志程序
LogSyslog yes

docker-compose 启动

version: '3'
services:
  clamav:
    image: clamav/clamav:1.4.2
    container_name: clamav
    ports:
      - "3310:3310"
    volumes:
      # 病毒库存放路径
      - ./data:/var/lib/clamav
      # 配置文件存放路径
      - ./config:/etc/clamav
      # 日志存放路径
      - ./logs:/var/log/clamav

如果需要 docker 容器不可访问外网,可以改成下面配置

version: '3'
services:
  clamav:
    image: clamav/clamav:1.4.2
    container_name: clamav
    networks:
      - internal  # 仅加入内部网络
    ports:
      - "3310:3310"
    volumes:
      - ./data:/var/lib/clamav
      - ./config:/etc/clamav
      - ./logs:/var/log/clamav

networks:
  internal:
    internal: true  # 禁用外部网络访问

启动

docker-compose up -d

查看日志输出

docker-compose logs -f