cups docker增加lpd的支持

cups的docker使用的是
https://hub.docker.com/r/olbat/cupsd

使用命令

docker run -d -p 631:631 -v /var/run/dbus:/var/run/dbus --name cupsd olbat/cupsd

创建的容器

先进入容器

docker exec -it cupsd bash

很干净的容器,vi都没有不太方便修改配置。想先装个vi,结果apt-get update就报错了
gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed

google查了很久,发现是docker和宿主机libseccomp之间的bug。由于宿主机是CentOS 7,升级docker和libseccomp都很麻烦。后面找到的方法是
https://github.com/tianon/docker-brew-ubuntu-core/issues/207
重建docker镜像,加入--security-opt seccomp=unconfined的选项。加了后新容器里面就可以apt-get了。(理论上不重建也可以,修改 hostconfig.json,修改为 "SecurityOpt":["seccomp=unconfined"])

打开cups-lpd的方法参考 https://askubuntu.com/questions/490540/ubuntu-server-14-04-with-cups-lpd-lpr-suppor
安装inetd

apt-get install openbsd-inetd

编辑 /etc/inetd.conf,增加一行
printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd

重启inetd

/etc/init.d/openbsd-inetd restart

这时候cups-lpd已经起来了,但是docker建立的时候,我们还没有映射515端口出来。动态修改docker端口映射的方法网上很多讲了的。进入目录 /var/lib/docker/containers/[hash_of_the_container],修改hostconfig.json的PortBindings,和config.v2.json的ExposedPorts

除了修改端口映射,还有一个问题是inetd并不会随着docker启动而自启动。因为 olbat/cupsd 的入口为
CMD ["/usr/sbin/cupsd", "-f"]

因此我们要修改容器的入口,改为启动一个脚本,同时启动cupsd和inetd。在docker容器内,在根目录添加一个start.sh,内容如下

/etc/init.d/openbsd-inetd start
/usr/sbin/cupsd -f

修改宿主机的 /var/lib/docker/containers/[hash_of_the_container]/config.v2.json
"Path":"/usr/sbin/cupsd","Args":["-f"] 改为
"Path":"/bin/bash","Args":["/start.sh"]

重启docker服务,重启cupsd容器

然后用windows的lpr命令测试一下
lpr -S 192.168.1.43 -P C5000 -o l 1.pdf
成功打印

你可能感兴趣的:(cups docker增加lpd的支持)