Печать документов из контейнера docker на локальном принтере

Есть винда, на которой я включил подсистему linux и установил Ubuntu. Задача: Развернуть контейнер на убунту, который может отправлять задания на печать из контейнера Гугл говорит, что чтобы была доступна печать на Ubuntu надо развернуть cups. Я развернул, добавил принтер, тестовая печать работает Вопрос, как, и вообще возможно ли отправить из контейнера команду на хост машину,чтобы можно было распечатать документ?


Ответы (1 шт):

Автор решения: Pak Uula

Ваш хост виден в контейнере по адресу гейтвея локальной сети. Выполните внутри контейнера команду 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

→ Ссылка