我将一些文件存储在Google Drive文件夹中,并在本地运行我的脚本,以便脚本从GDrive文件夹读取文件,然后将一些输出保存到GDrive文件夹。
我现在想用函数do_stuff()
容器化一个脚本,这样它就可以访问google_drive_folder
来读取和写入数据。
import os
from pickle import load, dump
import my_script
google_drive_folder = 'C:\Users\Me\Google Drive\Projects'
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}')
我得到的错误信息看起来像这样,即使使用Windows资源管理器时,我可以复制粘贴确切的路径并找到我正在寻找的文件。
FileNotFoundError: [Errno 2] No such file or directory: 'C:/Users/Me/Google Drive/Projects/old_data.pickle'
所有的脚本都在一个名为src
的文件夹中。我试图使用docker-compose
,我已经尝试存储不同的变量,如文件夹位置到.env
文件,没有成功。
FROM python:3.10-slim
WORKDIR /code
COPY ./requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY ./src ./src
CMD ["python", "./src/my_script.py"]
docker-compose.yml
看起来像这样
services:
app:
build: .
container_name: my-scripts
command: python ./src/my_script.py
volumes:
- .:/code
env_file:
- .env
好吧,我做了一些调查,弄清楚了我到底需要做什么。下面的配置使得来自Google drive的数据可以从容器中访问,像这样
source_file_location = os.path.join('data', 'old_data.pickle')
with open(source_file_location, 'rb') as read:
old_data = load(read)
docker-compose。创建绑定挂载data
,但在容器的文件系统中不显示文件夹
services:
app:
build: .
container_name: my-scripts
command: python ./src/my_script.py
volumes:
- .:/code
- type: bind
source: "C:/Users/Me/Google Drive/Projects"
target: /code/data
env_file:
- .env
Dockerfile只是构建镜像,所有与桥接主机和容器文件夹相关的逻辑都在docker-compose
FROM python:3.10-slim
WORKDIR /code
COPY ./src ./src
COPY ./requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "./src/my_script.py"]
一旦你在容器上,你就不再是"正常的操作系统"了。
例如,python容器是基于linux的,所以没有C:whatever
这样的文件夹。
你要做的是使用一个卷,你将挂载在你的拾取文件的位置。
在容器领域
你将创建一个文件夹,命名为/data
,在这个文件夹中你将创建一个old_data.pickle
文件
当您在容器中运行脚本时,它必须访问/data文件夹,并将new_data.pickle
写入其中。
中的host real
您将仍然有一个C:UsersMeGoogle DriveProjects
文件夹。在这个文件夹中,新旧文件将同时出现。
在两个领域之间建立链接
链接是由"volume"语句,则在您的"卷"上有:C:UsersMeGoogle DriveProjects:/data
。部分。