Python脚本Docker部署报错:No such file or directory
解决Docker容器中Python脚本找不到文件的问题
问题根源
你的Python代码里硬编码的路径//some/LogFiles$是宿主机的路径,但Docker Compose已将该路径挂载到容器内的/check/some/LogFiles$,容器内不存在//some/LogFiles$这个路径,因此触发"No such file or directory"错误。
修复步骤
1. 修改Python代码中的路径
把代码里的路径替换为容器内的挂载路径:
# 替换原路径为容器内的挂载路径 for root, dirs, files in os.walk("/check/some/LogFiles$"): for filename in files: if "RSPowerBI" in filename: file = filename with open(f'/check/some/LogFiles$/{file}') as fd: lines = fd.readlines()
2. 确认Docker挂载路径格式(针对Windows共享目录)
如果//some/LogFiles$是Windows网络共享目录,需确保Docker能正常访问:
- 检查Docker Desktop是否开启了对应共享驱动器的访问权限
- 确认宿主机本身可以正常访问该共享目录,避免因为宿主机无法访问导致容器挂载失效
3. 可选:用环境变量解耦路径(推荐)
为避免硬编码路径,可通过环境变量传递容器内的日志目录路径:
修改Python代码:
import os # 从环境变量获取日志目录,默认值为容器挂载路径 log_dir = os.getenv("LOG_DIR", "/check/some/LogFiles$") target_file = None for root, dirs, files in os.walk(log_dir): for filename in files: if "RSPowerBI" in filename: target_file = filename break # 找到目标文件后提前退出循环 if target_file: break if target_file: with open(f'{log_dir}/{target_file}') as fd: lines = fd.readlines() else: print("未找到包含RSPowerBI的日志文件")
修改docker-compose.yml:
version: '3.1' services: bot2: image: first3 build: ./ restart: always volumes: - //some/LogFiles$:/check/some/LogFiles$ environment: - LOG_DIR=/check/some/LogFiles$
额外注意点
- 确认共享目录中确实存在包含
RSPowerBI的文件,避免因找不到文件导致后续open操作报错 - 若容器内用户无挂载目录的读取权限,可在Dockerfile中添加
RUN chmod -R 755 /check/some/LogFiles$调整权限
内容的提问来源于stack exchange,提问作者easyfreeze
相关产品推荐
相关产品推荐

