如何在Docker中正确配置并运行CUPS服务?
在Docker中正确运行CUPS服务的问题
我需要在Docker容器中运行CUPS服务,当前的Dockerfile内容如下:
ARG LIB_VERSION FROM buffer-connectors-base:"${LIB_VERSION}" WORKDIR /app RUN apt-get update RUN apt-get install cups -y COPY app/requirements.txt ./requirements.txt RUN pip --no-cache-dir install -r requirements.txt COPY app/ . CMD cupsd
启动容器后执行lpstat -p命令时出现报错:
root@021034ef2cda:/app# lpstat -p lpstat: Bad file descriptor
但进入容器手动执行cupsd命令后,服务就能正常工作:
root@021034ef2cda:/app# cupsd root@021034ef2cda:/app# lpstat -p lpstat: No destinations added.
之后还能正常安装打印机:
root@021034ef2cda:/app# lpadmin -p HP-TEST -E -v ipp://192.168.18.193 -m everywhere root@021034ef2cda:/app# lpstat -p printer HP-TEST is idle. enabled since Tue Sep 20 13:51:58 2022
请问该如何正确编写Dockerfile中的CUPS运行指令?
解决方案
问题根源是cupsd默认以守护进程模式后台运行,而Docker要求CMD启动的进程必须是前台进程才能维持容器存活。直接用CMD cupsd时,cupsd后台启动后Docker会认为主进程已退出,容器进入异常状态,导致lpstat调用失败。
解决方法是让cupsd以前台模式运行,修改Dockerfile的CMD指令为:
CMD ["cupsd", "-f"]
关键说明:
-f参数强制cupsd在前台运行,不会转入后台,确保Docker能持续监控该进程,容器保持正常运行状态。- 使用数组格式的
CMD是Docker的推荐写法,避免shell解析带来的潜在问题。
修改后重新构建镜像并启动容器,即可正常执行lpstat命令管理打印机。
内容的提问来源于stack exchange,提问作者maskalev
相关产品推荐
相关产品推荐

