容器化Python脚本,对项目文件夹以外的本地文件具有读写权限



我将一些文件存储在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文件,没有成功。

到目前为止,我的docker文件看起来像这样
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。部分。

相关内容

  • 没有找到相关文章

最新更新