访问外部驱动器中的数据,方法是在docker compose中将其添加为卷,然后使用docker compose-up



我有一个docker容器,运行一个简单的python-flask应用程序。它是一个linux容器,但我的机器是一台windows机器。我通过USB连接了一个外部硬盘驱动器,它在windows中显示为E驱动器。我已经允许docker通过设置访问C和E的所有内容。

我只想让我的python显示E中文件夹中的文件夹内容。但什么都找不到!以前我收到一个关于文件路径不存在的错误,但我能够修复它。然而,现在它似乎在我想要的路径上找不到任何内容。我已经看到了如何以卷为参数运行docker容器的例子,但我是用docker compose来运行的。

这是我的Dockerfile:

FROM python:3
WORKDIR /code
ENV FLASK_APP practice.py
ENV FLASK_RUN_HOST 0.0.0.0
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

这是我的docker撰写文件:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- /mnt/e/folderWithStuff/
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"

第二个卷的路径是/mnt/e/folderWithStuffInIt,因为这是我可以从Window机器的Ubuntu子系统访问的路径。这让我相信,当从linux容器内部访问时,它应该是相同的路径。

我正在达到的终点是:

@app.route('/list')
def list_files():
files = os.listdir("/mnt/e/folderWithStuff")
result = ""
for file in files:
result = result + file
return result

我得到的只是一页空白。这个路由很好,因为如果我更改它以返回字符串,我会在那个路由上看到字符串。它没有抱怨目录,所以看起来该目录中应该有一些东西。它看起来并没有真正访问我授予它访问权限的外部驱动器中的文件夹。我错过了什么或误解了什么?

我想通了!

在我在docker compose文件中定义的volumes部分中,您需要创建一个映射!

所以它实际上应该是这样的:

volumes:
- .:/code
- E:\files:/mnt/e/files

运行容器的机器上的路径必须表示在:符号的左侧。右边的路径可以是你想要的任何路径。你的代码将能够访问右边的路径,然后映射将允许你的代码访问你连接到主机的C、E或X驱动器上的任何内容。

最新更新