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

群晖Docker部署QGIS服务报错:找不到cmd.sh文件求助

Docker容器启动失败:找不到cmd.sh文件的解决方法

问题背景

在群晖设备上以root账户配置Docker服务后,容器无法启动,错误日志显示:

[FATAL tini (9)] exec /home/qgis/cmd.sh failed: No such file or directory

相关配置代码如下:

Dockerfile片段

ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini

ENV QGIS_PREFIX_PATH /usr
ENV QGIS_SERVER_LOG_STDERR 1
ENV QGIS_SERVER_LOG_LEVEL 2

COPY cmd.sh /home/qgis/cmd.sh
RUN chmod -R 777 /home/qgis/cmd.sh
RUN chown qgis:qgis /home/qgis/cmd.sh

USER qgis
WORKDIR /home/qgis

ENTRYPOINT ["/tini", "--"]

CMD ["/home/qgis/cmd.sh"]

cmd.sh文件内容

#!/bin/bash

[[ $DEBUG == "1" ]] && env

exec /usr/bin/xvfb-run --auto-servernum --server-num=1 /usr/bin/spawn-fcgi -p 5555 -n -d /home/qgis -- /usr/lib/cgi-bin/qgis_mapserv.fcgi

排查与解决步骤

  • 确认文件复制是否成功
    确保cmd.sh和Dockerfile在同一目录下,构建时添加--progress=plain参数查看COPY步骤输出,验证文件是否被正确复制到容器内:

    docker build --progress=plain -t qgis-server .
    
  • 修复行尾格式问题
    Windows创建的脚本可能带有CRLF换行符,Linux容器无法识别,执行以下命令转换为LF格式:

    sed -i 's/\r$//' cmd.sh
    

    转换后重新构建镜像。

  • 验证镜像内文件状态
    启动临时容器检查文件是否存在及权限:

    docker run --rm -it <你的镜像ID> /bin/bash
    

    进入容器后执行ls -l /home/qgis/cmd.sh,确认文件存在且有执行权限。

  • 检查bash依赖
    确认容器基础镜像已安装bash,若未安装,在Dockerfile中添加:

    RUN apt-get update && apt-get install -y bash
    

    同时验证容器内/usr/bin/bash路径是否正确,可在临时容器中执行which bash。

  • 简化CMD指令测试
    暂时修改CMD为通过bash直接调用脚本,排查是否为脚本执行方式问题:

    CMD ["/bin/bash", "/home/qgis/cmd.sh"]
    

    若能启动,再逐步排查脚本内的命令是否存在依赖缺失。

内容的提问来源于stack exchange,提问作者mr_applesauce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:15:36