群晖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
相关产品推荐
相关产品推荐

