Печать документов из контейнера docker на локальном принтере
Есть винда, на которой я включил подсистему linux и установил Ubuntu. Задача: Развернуть контейнер на убунту, который может отправлять задания на печать из контейнера Гугл говорит, что чтобы была доступна печать на Ubuntu надо развернуть cups. Я развернул, добавил принтер, тестовая печать работает Вопрос, как, и вообще возможно ли отправить из контейнера команду на хост машину,чтобы можно было распечатать документ?
Ответы (1 шт):
Ваш хост виден в контейнере по адресу гейтвея локальной сети. Выполните внутри контейнера команду ip addr:
$ ip addr
202170: eth0@if202171: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
У меня сеть inet 172.17.0.2, значит хост доступен по адресу 172.17.0.1
По умолчанию CUPS поднимает сервер на порту locahost:631. Чтобы этот сервер стал доступным для докера, нужно поправить конфигурационный файл. В примере ниже даются широкие разрешения, вы можете посмотреть документацию по CUPS чтобы их адаптировать под ваши настройки
sudo vim /etc/cups/cupsd.conf
Слушать порт 631 на всех интерфейсах
# Only listen for connections from the local machine.
# Listen localhost:631
Listen 0.0.0.0:631
Listen /run/cups/cups.sock
Разрешить подключения от всех клиентов
# Restrict access to the server...
<Location />
Order allow,deny
Allow all
</Location>
Теперь как этим пользоваться.
Внутри докера установите пакет cups-client. Этот пакет содержит команду lp - клиент сервера CUPS.
У меня на хосте установлен пакет cups-pdf, который создаёт для CUPS pdf-принтер с именем PDF. Команда ниже печатает текущую дату в PDF файл:
/ # date | lp -h 172.17.0.1:631 -d PDF -U user
request id is PDF-14 (0 file(s))
Что тут написано:
-h 172.17.0.1:631- печатать через хостовый принт-сервер-d PDF -U userпечатать в принтерPDFот имени пользователяuser.
Пользователя указывать необязательно. Я его указываю для принтера PDF, чтобы распечатки складывались в мой каталог на хосте /home/user/PDF
После выполнения этой команды на хосте появился файл /home/user/PDF/stdin___lay_PDF-job_14.pdf

Примеры выполнены для контейнера на базе alpine и хоста Ubuntu-18