Podman运行挂载目录sh脚本报错:No such file or directory
问题解决方案
1. 修正脚本Shebang行(最常见原因)
Alpine Linux默认未预装bash,如果你的package.sh开头是#!/bin/bash,容器会因找不到bash而抛出误导性的“文件不存在”错误。
解决方式二选一:
- 修改脚本首行为
#!/bin/sh(Alpine默认shell是ash,完全兼容sh语法) - 在Dockerfile中添加bash安装:
FROM python:3.12-alpine RUN apk update && apk add zip bash libpq-dev build-base RUN /usr/local/bin/python -m pip install --upgrade pip
2. 转换脚本换行符格式
如果脚本在Windows环境下编辑,换行符是CRLF(\r\n),而Linux容器仅识别LF(\n),会导致执行时把\r当作路径的一部分,触发错误。
解决方式二选一:
- 本地执行
dos2unix local-scripts/package.sh转换格式 - 在容器内先转换再执行,修改Makefile命令:
同时在Dockerfile中添加dos2unix依赖:@podman build -t python-alpine-local -f local-scripts/Dockerfile . @podman run -v ${PWD}:/app localhost/python-alpine-local sh -c "dos2unix /app/local-scripts/package.sh && /app/local-scripts/package.sh"RUN apk update && apk add zip dos2unix libpq-dev build-base
3. 添加脚本执行权限
本地脚本可能缺少可执行权限,挂载到容器后会继承该属性:
chmod +x local-scripts/package.sh
4. 验证路径与文件状态
可临时修改Makefile命令,先确认文件存在性与权限:
@podman run -v ${PWD}:/app localhost/python-alpine-local ls -l /app/local-scripts/
确认package.sh存在且权限包含x(可执行)后,再执行原脚本命令。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

