
drpsychick/airprint-bridge服务的容器,将网络中的本地打印机通过AirPrint协议暴露给iOS/macOS设备,实现无线打印功能。
smb://user:pass@host/printer)macOS不支持此功能(详见:Docker for Mac网络限制)
shell# 启动临时容器(含Web管理界面) docker run -d --rm -e CUPS_WEBINTERFACE="yes" -e CUPS_REMOTE_ADMIN="yes" --hostname mycups --name cups-setup drpsychick/airprint-bridge # 重要:仅当主机名/IP匹配时才能进行管理!(不支持端口转发等) # 主机名不匹配时CUPS错误:`Request from "172.17.42.1" using invalid Host: field "localhost:6310"` echo "CUPS管理地址:[***] inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress }}' cups-setup):631" # -> 访问上述地址配置打印机 # 导出打印机配置文件(获取设备ID等关键信息) docker cp cups-setup:/etc/cups/printers.conf ./
重要:Docker环境变量仅支持单行且无双引号!
| 环境变量 | 默认值 | 说明 |
|---|---|---|
CUPS_ADMIN_USER | "admin" | CUPS管理员用户名 |
CUPS_ADMIN_PASSWORD | "secr3t" | CUPS管理员密码 |
CUPS_WEBINTERFACE | "yes" | 是否启用Web管理界面 |
CUPS_SHARE_PRINTERS | "yes" | 是否共享打印机 |
CUPS_REMOTE_ADMIN | "yes" | 是否允许远程管理 |
CUPS_ACCESS_LOGLEVEL | "config" | 访问日志级别(可选:all, access, config,详见man cupsd.conf) |
CUPS_LOGLEVEL | "warn" | 服务日志级别(可选:error, warn, info, debug, debug2,详见man cupsd.conf) |
CUPS_ENV_DEBUG | "no" | 是否启用调试模式(启动脚本调试及CUPS详细日志) |
CUPS_IP | $(hostname -i) | CUPS服务绑定IP(通常无需手动设置) |
CUPS_HOSTNAME | $(hostname -f) | CUPS主机名(用于通过域名访问,如[***]) |
CUPS_SSL_CERT | "" | SSL证书内容(单行,换行符用\n表示) |
CUPS_SSL_KEY | "" | SSL密钥内容(单行,换行符用\n表示) |
AVAHI_INTERFACES | "" | Avahi监听接口 |
AVAHI_IPV6 | "no" | 是否启用IPv6支持 |
AVAHI_REFLECTOR | "no" | 是否启用mDNS反射器 |
AVAHI_REFLECT_IPV | "no" | 是否反射IPv4/IPv6流量 |
设置以CUPS_LPADMIN_PRINTER为前缀的环境变量,容器启动时将自动执行lpadmin命令添加打印机:
shell# 示例1:添加IPP打印机 CUPS_LPADMIN_PRINTER1=lpadmin -p test -D '测试打印机' -m raw -v ipp://myhost/printer # 示例2:添加"通用"类型打印机 CUPS_LPADMIN_PRINTER2=lpadmin -p second -D '另一台打印机' -m everywhere -v ipp://myhost/second # 示例3:添加带驱动和选项的Samba打印机 CUPS_LPADMIN_PRINTER3=lpadmin -p third -D 'Samba打印机' -m '驱动字符串' -o PageSize=A4 -v smb://user:pass@host/printer # 启用打印机 CUPS_LPADMIN_PRINTER3_ENABLE=cupsenable third
CUPS_WEBINTERFACE="yes"和CUPS_REMOTE_ADMIN="yes"(建议仅临时启用)shell# cupsd.conf配置示例 Listen *:631 WebInterface Yes <Location /> Order allow,deny Allow from all </Location> <Location /admin> Order allow,deny Allow from all </Location>
https://<容器IP>:631/admin或https://<容器主机名>:631,使用CUPS管理员账户登录配置lpadmin命令配置并测试打印机shell# 从容器复制配置文件 docker cp cups-test:/etc/cups/printers.conf ~/mycups/ docker cp cups-test:/etc/cups/ppd/PrinterName.ppd ~/mycups/
Dockerfile# ~/mycups/Dockerfile FROM drpsychick/airprint-bridge:latest COPY printers.conf /etc/cups/ COPY PrinterName.ppd /etc/cups/ppd/
shelldocker build -t mycups:latest ~/mycups/ docker run -d --name my-airprint-bridge mycups:latest
无需额外配置,添加打印机后自动通过Avahi服务广播AirPrint协议,iOS/macOS设备可自动发现。
默认禁用,需通过以下步骤配置(基于"快速体验"中创建的容器):
进入容器生成配置文件:
shelldocker exec -it cups-setup /bin/bash # 执行配置工具,按提示完成设置(生成gcp-cups-connector.config.json) (cd /etc/gcp-connector; gcp-connector-util init)
设置以下环境变量启用服务:
shellGCP_ENABLE_LOCAL="false" # 是否启用本地GCP服务 GCP_ENABLE_CLOUD="false" # 是否启用云端GCP服务 GCP_XMPP_JID="从配置文件获取" # XMPP JID GCP_REFRESH_TOKEN="从配置文件获取" # 刷新令牌 GCP_PROXY_NAME="从配置文件获取" # 代理名称
为使容器在本地子网可见,需创建macvlan网络接口(主机需与容器通信时需要):
shelleth=eth0 # 物理网络接口 mac=AA:AA:AA:AA:AA # 物理接口MAC地址 mac2=AA:AA:AA:AA:AB # 容器虚拟MAC地址 # 启用混杂模式(支持多个MAC地址) sudo ifconfig $eth promisc # 创建macvlan接口 sudo ip link add mac0 link $eth address $mac type macvlan mode bridge # 刷新网络配置 sudo -- bash -c '( dhclient -r $eth && ip addr flush dev $eth && ip neigh flush all dhclient mac0 && service resolvconf restart || dhclient $eth )'
创建macvlan网络(替换为实际子网和网关):
shell# 若无需主机与容器通信,parent可直接使用物理接口(如eth0) docker network create --driver macvlan --subnet 192.168.2.0/24 --gateway 192.168.2.1 -o parent=mac0 localnet
创建并启动容器:
shellcups_ip=192.168.2.100 # 容器IP cups_name=cups.home # 容器主机名 docker create --name cups-airprint \ --net=localnet --ip=$cups_ip --hostname=$cups_name \ --memory=100M \ -p 137:137/udp -p 139:139/tcp -p 445:445/tcp \ -p 631:631/tcp -p 5353:5353/udp \ -e CUPS_ADMIN_USER=admin -e CUPS_ADMIN_PASSWORD=secr3t \ -e CUPS_LPADMIN_PRINTER1="lpadmin -p epson -D '爱普生打印机' -m raw -v smb://user:pass@192.168.2.2/epson" \ drpsychick/airprint-bridge:latest # 启动容器 docker start cups-airprint
QNAP设备不支持macvlan,需使用qnet驱动创建网络:
shelldocker network create --driver=qnet --ipam-driver=qnet --ipam-opt=iface=bond0 --subnet <子网> <网络名称>
详见项目issue跟踪:drpsychick/docker-cups-airprint/issues
基于以下项目的出色工作:
欢迎通过以下方式贡献:


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务