You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:50