马上折腾...

文章背景图

群晖 NAS Docker 部署 CUPS AirPrint:让普通 USB 打印机支持 iPhone 无线打印(双网口避坑)

2026-08-03
3
-
- 分钟

前言

家里的 USB 打印机通常只能连接电脑使用,如果电脑关机,其他设备就无法打印。

通过在群晖 NAS 上部署 CUPS(Common UNIX Printing System)和 Avahi,可以将普通 USB 打印机转换成局域网打印机,实现:

  • iPhone / iPad 使用 AirPrint 无线打印

  • Windows 添加网络打印机

  • 家庭多设备共享一台 USB 打印机

不过,在群晖双网口环境下,部署过程中有一个容易忽略的问题:

CUPS 可以正常运行,打印机也可以添加,但是 iPhone 搜不到 AirPrint。

这个问题通常不是打印机驱动问题,而是:

mDNS(Bonjour / AirPrint)广播接口和 Docker CUPS 所在网络接口不一致。

本文记录完整部署过程以及双网口环境下的正确配置方式。


一、环境介绍

本文使用环境:

群晖 NAS

双网口:

ovs_eth0
ovs_eth1

NAS 地址:

192.168.11.6

打印机

USB 连接群晖:

HP DeskJet 2130 series

网络环境

普通家庭局域网:

192.168.11.0/24

所有设备:

  • 手机

  • 电脑

  • 路由器

  • NAS

都在同一个局域网。

注意:

这里的重点不是手机连接哪个网口,而是:

Docker CUPS 使用哪个 NAS 网口,AirPrint 广播就需要从对应网口发出。


二、为什么不用 Docker host 网络?

很多教程会直接使用:

--network host

但是群晖 DSM 本身已经运行 CUPS 服务。

查看:

netstat -lntp | grep 631

可以看到:

/usr/bin/cupsd

监听 631 端口。

如果 Docker 再使用 host 网络:

DSM CUPS
+
Docker CUPS

两个服务会竞争:

192.168.11.6:631

导致:

  • 打开的页面不是 Docker CUPS

  • 配置混乱

  • AirPrint 服务无法确定来源

因此采用 macvlan 给 Docker CUPS 分配独立 IP。


三、使用 macvlan 创建独立 IP

最终规划:

群晖 NAS:

192.168.11.6


Docker CUPS:

192.168.11.20

这样:

访问:

http://192.168.11.20:631

进入 Docker CUPS。


四、双网口最大的坑:macvlan 和 Avahi 广播接口

群晖双网口:

ovs_eth0
ovs_eth1

两个网口虽然都连接同一个局域网,但是 Docker macvlan 必须绑定正确接口。

例如:

Docker CUPS 使用:

ovs_eth1

那么:

  • macvlan parent 必须是 ovs_eth1

  • Avahi 广播接口也必须是 ovs_eth1

否则:

可能出现:

  • CUPS 页面正常

  • 打印机添加成功

  • Windows 可以发现

  • iPhone 搜不到 AirPrint

原因:

AirPrint 使用 mDNS 广播。

如果广播从错误网口发送,手机无法发现服务。


创建 macvlan:

docker network create -d macvlan \
--subnet=192.168.11.0/24 \
--gateway=192.168.11.1 \
-o parent=ovs_eth1 \
cups_net

检查:

docker network inspect cups_net

确认:

"parent": "ovs_eth1"

五、拉取 CUPS AirPrint 镜像

Docker Hub 国内访问可能不稳定,可以使用镜像代理:

docker pull dockerproxy.net/jichangfeng/cups-airprint:latest

确认:

docker images | grep cups-airprint

六、创建 CUPS AirPrint 容器

创建配置目录:

mkdir -p /volume1/docker/cups-airprint/etc-cups

运行:

docker run -d \
--name cups-airprint \
--restart always \
--network cups_net \
--ip 192.168.11.20 \
--privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /volume1/docker/cups-airprint/etc-cups:/etc/cups \
-e TZ=Asia/Shanghai \
dockerproxy.net/jichangfeng/cups-airprint:latest

查看:

docker ps | grep cups

七、进入 CUPS 管理页面

浏览器访问:

http://192.168.11.20:631

注意:

不要访问:

http://192.168.11.6:631

因为:

192.168.11.6

是群晖 DSM 自带 CUPS。


如果出现:

Web Interface is Disabled

进入容器:

docker exec -it cups-airprint sh

执行:

cupsctl WebInterface=yes

检查:

cupsctl | grep WebInterface

显示:

WebInterface=yes

即可。


八、添加 HP USB 打印机

进入:

Administration
→ Add Printer

选择:

HP DeskJet 2130 series USB CN78J4721W065Y HPLIP

不要选择普通:

HP DeskJet 2130 series

原因:

HPLIP 驱动提供更好的 HP 打印支持。

选择驱动:

HP DeskJet 2130 Series hpcups

保存。

开启:

Share This Printer

九、检查打印机状态

进入容器:

docker exec -it cups-airprint sh

查看:

lpstat -p -d

正常:

printer HP2130 is idle

说明 CUPS 已经识别打印机。


十、配置 Avahi AirPrint 广播

AirPrint 依赖:

mDNS / Bonjour

Linux 使用:

Avahi

进行广播。

双网口环境重点:

查看:

cat /etc/avahi/avahi-daemon.conf

设置:

[server]
allow-interfaces=ovs_eth1

这里的含义:

不是选择手机所在网络。

而是:

让 Avahi 从 Docker CUPS 所绑定的网口发送 AirPrint 广播。


检查:

avahi-browse -a | grep AirPrint

正常:

AirPrint HP_DeskJet_2130_series

十一、常见问题

1. 打开 192.168.11.6:631

看到:

Web Interface is Disabled

原因:

访问的是 DSM 自带 CUPS。

解决:

访问:

192.168.11.20:631

2. CUPS 正常,但是手机搜索不到打印机

检查三个地方:

Docker macvlan:

docker network inspect cups_net

确认:

parent=ovs_eth1

Avahi:

确认:

allow-interfaces=ovs_eth1

不要混用网口:

错误:

Docker CUPS → ovs_eth1

Avahi → ovs_eth0

正确:

Docker CUPS → ovs_eth1

Avahi → ovs_eth1

3. 不要映射 /etc/avahi

不要:

-v xxx:/etc/avahi

因为空目录会覆盖容器内部 Avahi 配置。

只需要保存:

/etc/cups

即可。


十二、最终效果

完成后:

                 家庭局域网

手机 / 电脑
       |
    路由器
       |
  群晖 NAS
192.168.11.6

       |
    ovs_eth1

       |
    macvlan

       |
 Docker CUPS
192.168.11.20:631

       |
 USB打印机
HP DeskJet 2130

手机:

照片
→ 分享
→ 打印

即可找到打印机。


总结

群晖双网口部署 CUPS AirPrint,真正需要注意的不是安装 CUPS,而是:

  1. DSM 自带 CUPS 会占用 631 端口,不能使用 host 网络;

  2. Docker 使用 macvlan 获取独立 IP;

  3. macvlan 绑定的网口必须正确;

  4. Avahi AirPrint 广播接口必须和 CUPS 网络接口一致。

只要保证:

CUPS 网络接口
=
macvlan parent接口
=
Avahi广播接口

普通 USB 打印机也可以稳定升级成支持 iPhone AirPrint 的无线打印机。

评论交流

文章目录