Armbian + Docker 打造无冲突、全功能 AirPrint Epson L3250 系列打印机

一、迁移背景与“避坑”指南

为什么要折腾?

之前在 OpenWrt 路由器上使用 jysky007/cups 容器搭建打印服务器,体验非常稳定。但最近迁移到 Armbian 盒子后,却遇到严重系统冲突:

  • 现象:只要 CUPS 容器在运行,宿主机上的其他 Docker 容器就无法启动或重启。必须先 docker stop cups,才能操作其他服务。
  • 原因jysky007/cups 是为嵌入式系统设计的“全家桶”镜像,容器内部运行了自己的 DBus 和 Avahi 守护进程。在 Armbian(标准 Linux + Systemd)上,容器抢占系统总线资源,导致宿主机 Systemd 与 Docker 资源冲突。

解决方案

为了彻底解决冲突,我采用了解耦架构

  1. Docker (ydkn/cups):只运行 CUPS 服务,不碰 Systemd,避免冲突。
  2. 宿主机 Avahi:利用宿主机的稳定 Avahi 广播 AirPrint 服务。

这样做的好处:
✅ 不影响其他 Docker 容器运行
✅ 支持完整彩色打印
✅ 方便未来维护和升级


二、准备工作

  • 设备:运行 Armbian 的盒子(N1、OECT等)
  • 打印机:Epson L3250(或其他网络打印机),已联网
  • 环境:已安装 Docker 和 Docker Compose

三、部署纯净版 CUPS 容器

使用 ydkn/cups 镜像,只运行 CUPS 服务,配置文件映射到宿主机便于修改 PPD 驱动。

  1. 创建数据目录
mkdir -p /mnt/docker/cups/cups_data
cd /mnt/docker/cups
  1. 编写 docker-compose.yml
services:
  cups:
    image: ydkn/cups
    container_name: cups
    restart: unless-stopped
    network_mode: "host"  # 直接使用宿主机网络
    environment:
      - ADMIN_PASSWORD=admin # 设置 CUPS 后台密码
    volumes:
      - ./cups_data:/etc/cups  # 映射配置文件,方便修改 PPD
  1. 启动容器
docker compose up -d
  1. 添加打印机
  • 打开浏览器访问 http://你的ArmbianIP:631/admin
  • 添加打印机,协议选 互联网打印协议 (IPP)
  • 驱动选择:EPSON XP-322/323/325 Series, Epson Inkjet Driver (ESC/P-R, Color)
  • 勾选 [✅] Share This Printer

四、配置宿主机 Avahi 广播

让宿主机负责 AirPrint 广播,保证 iPhone / iPad 能发现打印机。

  1. 安装 Avahi
sudo apt update
sudo apt install -y avahi-daemon avahi-utils
systemctl enable avahi-daemon
systemctl start avahi-daemon
  1. 锁定广播接口
    编辑 /etc/avahi/avahi-daemon.conf,只广播真实物理网卡,避免 Docker 虚拟网卡干扰:
[server]
use-ipv4=yes
use-ipv6=no
allow-interfaces=br0   # 填写真实物理网卡名,可用 ip addr 查看
  1. 创建 AirPrint 服务文件
sudo vi /etc/avahi/services/AirPrint.service

内容如下(彩色打印关键):

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">打印机名称 @ %h</name>
  <service>
    <type>_ipp._tcp</type>
    <subtype>_universal._sub._ipp._tcp</subtype>
    <port>631</port>
    <txt-record>txtvers=1</txt-record>
    <txt-record>qtotal=1</txt-record>
    <txt-record>Transparent=T</txt-record>
    <txt-record>URF=none</txt-record>
    <txt-record>rp=printers/打印机名称</txt-record>
    <txt-record>note=Armbian</txt-record>
    <txt-record>product=(GPL Ghostscript)</txt-record>
    <txt-record>printer-state=3</txt-record>
    <txt-record>printer-type=0x100c</txt-record>
    <txt-record>Color=T</txt-record>
    <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,application/vnd.cups-raster,image/gif,image/jpeg,image/png,image/tiff,image/urf,text/html,text/plain,application/vnd.adobe-reader-postscript,application/vnd.cups-pdf</txt-record>
  </service>
</service-group>
  1. 重启 Avahi
sudo systemctl restart avahi-daemon

验证步骤

  1. 打印照片,选择 Epson L3250 AirPrint (Color)
  2. 应该可以看到彩色预览,并正常打印

✅ 系统稳定,不再影响其他 Docker 容器
✅ AirPrint 全功能(黑白 / 彩色 / PDF / 图片)


总结

通过 **Docker 极简 CUPS + 宿主机 Avahi ** 的方式,我们成功实现了:

  • 无冲突的多容器环境
  • 全功能 AirPrint 彩色打印
  • 轻量、易维护,升级方便

适用于 Armbian / Ubuntu / Debian 嵌入式盒子,尤其适合 Epson L 系列打印机。

文章作者: I-Meet
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 I-Meet
科技 epson cups docker-compose docker openwrt armbian
喜欢就支持一下吧