How to Deploy a Containerized Print Service Using IPP and Port 9100
Joe B.
Reviewed for technical accuracy
Specialities: Windows 11/10, macOS (Sonoma/Ventura/Monterey), Printers, Networking, Docker, CUPS
Docker Compose CUPS print server — IPP/IPP Everywhere/AirPrint on 631 and RAW/JetDirect 9100, bridge vs host network
Quick answer: the accepted fix
Accepted fix when
IPP/RAW 9100 from a Docker container is not reachable
: publish ports in Compose (
ports: ["631:631","9100:9100"]
), allow only LAN/VPN subnets via firewall, avoid reverse proxies for 9100, and run
host networking
or
avahi
sidecar for AirPrint. In
cupsd.conf
listen on 631, restrict to
@LOCAL
, and disable public admin.
Port 9100 or IPP 631 blocked after deployment (Docker Compose)
Updates or compose changes can drop published ports. Verify your
docker-compose.yml
includes the correct
ports
entries and that the service is
healthy
. Check host firewalls (
ufw
/
firewalld
/Windows) and router ACLs. If discovery is required, prefer
host
networking or advertise with
avahi
.
How to verify the containerized print service
Open
http://server:631
to confirm CUPS is reachable. Run
nc -vz server 9100
to confirm
JetDirect 9100
. Print a 2‑page PDF over
IPP
; if jobs stall, inspect
/var/log/cups/error_log
and ensure the container can reach the physical printer on your LAN (route/NAT/ARP ok).
Containerized printing — deployment & security tips
Most issues come from missing port publishing, blocked firewalls, or mDNS discovery gaps.
Quick path: choose the right
network mode
→ publish
631/9100
→ add
allow‑lists
→ set
cupsd.conf
to
@LOCAL
→ test with
curl
/
nc
. Prefer
IPP/IPPS
for modern clients; use
RAW 9100
only when necessary.
Disclaimer: This information is AI-generated and intended for general guidance only. For advice specific to your environment, please consult a verified expert on Whizz-Tech before making decisions.
Getting Started Is Easy
Ask for help, 24/7
Members enjoy round-the-clock access to 12,000+ verified Experts, including tech support, mechanics, vets, and more.
Expert will respond in minutes
We match you with an Expert who specializes in your situation. Talk, text, or chat — whichever you prefer.
Save time & money
No scheduling hassles or expensive consults. Membership can save you significant time and money each month.
FAQ
Why can’t clients reach IPP/631 or RAW/JetDirect 9100 from my Docker container?
Usually the ports aren’t published in Compose, the host firewall blocks them, or a reverse proxy is interfering. Publish 631/9100 directly, allow only LAN/VPN subnets, and avoid proxying 9100.
Is host networking required for AirPrint/Bonjour?
No, but it’s the simplest. With bridge networking you need an
avahi
sidecar (DBus +
--net=host
) or advertise from the host OS so iOS/macOS discover
_ipp._tcp
/
_ipps._tcp
.
Is it safe to expose 9100 on the internet?
Do not expose 9100 publicly. Keep it on the LAN/VPN only, enforce firewall allow‑lists, and prefer IPP/IPPS with authentication when possible.
Can I use Traefik/Nginx to proxy printing?
Proxy the CUPS web UI only. Printing should go directly to IPP/631 (optionally IPPS) and RAW 9100 on the LAN.
What’s a minimal docker-compose for CUPS?
Use volumes for
/etc/cups
and
/var/spool/cups
, publish
631
(and
9100
if needed), add
restart: unless-stopped
and a
healthcheck
. Restrict with firewall and
cupsd.conf Require ip @LOCAL
.
| Symptom | Likely cause | Quick fix |
|---|---|---|
| IPP works, 9100 fails | 9100 not published; proxy in the path | Add ports for 9100 and avoid reverse proxies |
| Clients can’t discover printer | No mDNS across container boundary | Use host networking or an avahi sidecar |
| Reachable from WAN | All interfaces binding | Bind to LAN IP only + router/WAN block |
| Jobs stall | Firewall/NAT or backend path |
Allow 631/9100; check
/var/log/cups/error_log
|
Step‑by‑step (Docker host)
-
Choose
bridge
with
ports: ["631:631","9100:9100"], or host networking if you need AirPrint discovery. -
Persist configuration with volumes (
/etc/cups,/var/spool/cups); addrestartandhealthcheck. -
Harden: bind to LAN IP, allow‑list subnets via firewall, configure
cupsd.confwithRequire ip @LOCAL. -
Test connectivity (
curlfor 631,ncfor 9100) and send a test page from Windows/macOS/Linux.
Step‑by‑step (Client setup)
-
On Windows, add an
IPP
printer (
ipp://server/printers/queue) or a Standard TCP/IP Port with JetDirect 9100 and the vendor driver. -
On macOS, add via
AirPrint/IPP
or use the IP tab with
ipp://. For legacy devices, use LPD . - Save a preset for color/duplex and verify a two‑page test prints correctly.
Sources
- Docker — Compose v2
- CUPS — cupsd.conf reference
- OpenPrinting — IPP Everywhere
- Apple — AirPrint on macOS
Filed under: Printers
Related articles
- Printer won’t print after I changed Wi-Fi — what should I check first?
- Printer won’t print after I installed a new router — what do I check first?
- Printer won’t print my medical forms online — what do I check first?
- Printer won’t print bank forms online — the Print button works, but nothing comes out
- Printer won’t print from a website — I click Print and nothing happens
- Printer won’t print a PDF correctly — why is it cutting off or coming out blank?
- My printer ignores my print settings — why is it printing the wrong way?
- My printer won’t print black ink — but everything else prints. What’s wrong?