服务的容器,将网络中的本地打印机通过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
基于以下项目的出色工作:
欢迎通过以下方式贡献:
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429