容器化Python脚本时访问本地Google Drive文件夹的读写问题
解决Docker容器无法访问Windows本地Google Drive文件夹的问题
问题说明
本地运行Python脚本可以正常读写Windows路径C:\Users\Me\Google Drive\Projects下的文件,但容器化后执行脚本时触发FileNotFoundError,提示该路径不存在。
错误原因
Docker容器拥有独立的文件系统,Windows本地的C:\...路径在容器内部是不存在的,必须通过卷挂载将Windows的本地目录映射到容器内的路径,容器才能访问到这些文件。
解决方案
1. 修改Python脚本,使用环境变量指定路径
将硬编码的Windows路径替换为从环境变量读取容器内的挂载路径,让脚本适配容器环境:
import os from pickle import load, dump import my_script # 从环境变量获取容器内的Google Drive挂载路径 google_drive_folder = os.getenv('GOOGLE_DRIVE_MOUNT_PATH', '/google_drive') source_file_location = os.path.join(google_drive_folder, 'old_data.pickle') with open(source_file_location, 'rb') as read: old_data = load(read) new_data = my_script.do_stuff(old_data) target_file_location = os.path.join(google_drive_folder, 'new_data.pickle') with open(target_file_location, 'wb') as fp: dump(new_data, fp) print(f'File saved to {target_file_location}')
2. 更新docker-compose.yml,添加卷挂载
在volumes字段中添加Windows目录到容器目录的映射,同时通过环境变量告诉脚本容器内的挂载路径:
services: app: build: . container_name: my-scripts command: python ./src/my_script.py volumes: - .:/code # 将Windows的Google Drive文件夹挂载到容器内的/google_drive路径 - C:/Users/Me/Google Drive/Projects:/google_drive environment: - GOOGLE_DRIVE_MOUNT_PATH=/google_drive
注意:Windows路径在docker-compose中需使用正斜杠
/,不要用Windows默认的反斜杠。
3. (可选)用.env文件管理路径(更灵活)
如果不想把路径硬编码在docker-compose里,可以创建.env文件统一管理:
# .env文件内容 WINDOWS_GOOGLE_DRIVE_PATH=C:/Users/Me/Google Drive/Projects CONTAINER_MOUNT_PATH=/google_drive
然后修改docker-compose.yml引用环境变量:
services: app: build: . container_name: my-scripts command: python ./src/my_script.py volumes: - .:/code - ${WINDOWS_GOOGLE_DRIVE_PATH}:${CONTAINER_MOUNT_PATH} env_file: - .env environment: - GOOGLE_DRIVE_MOUNT_PATH=${CONTAINER_MOUNT_PATH}
验证步骤
- 确认Windows的
C:\Users\Me\Google Drive\Projects目录下存在old_data.pickle文件 - 重新构建并运行容器:
docker-compose up --build - 运行完成后,检查Google Drive文件夹是否生成了
new_data.pickle文件
内容的提问来源于stack exchange,提问作者qoob
相关产品推荐
相关产品推荐

