Docker容器提示run.sh不存在,无法运行多个Python脚本
排查Docker容器执行run.sh报错"no such file or directory"的问题
问题根源排查
克隆仓库并执行docker-compose up -d后,查看myapp容器日志,定位到两个核心问题:
- run.sh无执行权限:通过
COPY命令复制到容器的脚本默认没有可执行权限,容器无法直接调用执行。 - Windows换行符导致解释器识别失败:如果run.sh是在Windows环境下编写的,脚本使用CRLF换行符,Linux容器中的bash解释器会把
#!/bin/bash\r当作完整的命令路径,从而抛出"no such file or directory"(实际是找不到带\r后缀的解释器)。
修复步骤
1. 给run.sh添加执行权限
在Dockerfile中添加RUN chmod +x run.sh命令,确保脚本具备可执行权限。修改后的Dockerfile关键部分如下:
WORKDIR /usr/src/app COPY . . # 安装依赖(如果有requirements.txt) RUN pip install --no-cache-dir -r requirements.txt # 添加执行权限 RUN chmod +x run.sh CMD ["./run.sh"]
同时建议明确设置WORKDIR,确保后续命令在指定目录下执行。
2. 修正脚本换行符
将run.sh的换行符从CRLF改为LF:
- 用VS Code打开run.sh,点击右下角的"CRLF",切换为"LF"后保存。
- 或者用Git命令转换:
git config core.autocrlf false,重新提交脚本文件。
3. 确保run.sh的shebang正确
脚本开头必须包含正确的解释器声明:
#!/bin/bash # 后台运行producer.py python producer.py & # 后台运行consumer.py python consumer.py & # 前台运行test_conn.py python test_conn.py
验证修复
重新构建镜像并启动容器:
docker-compose down docker-compose up -d --build docker logs myapp
此时容器应该能正常启动并运行三个Python脚本。
内容的提问来源于stack exchange,提问作者Martim Sousa
相关产品推荐
相关产品推荐

