我开始为 Linux 重写软件,发现 python 看不到我电脑中的文件/文件夹。而且,它没有看到所有文件夹/文件,而是一些,(他开始深入研究这个,因为他无法连接sqlite)虽然带有文件的整个目录的权限是chmod 777,但这并没有帮助,他们仍然显然在某些方面有所不同(我有条件地规定了绝对路径 - /home/user/data/...)我向所有目录和内部发出了 chmod 777,在 python 本身中测试了各种验证选项,包括 os、sys、子进程'ls',但他们看不到(尽管来自控制台的 ls 有条件地看到)
import subprocess
file_path = '/home/user/data/logs'
try:
result = subprocess.run(['ls', file_path], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("yes")
except subprocess.CalledProcessError:
print("no")
此代码将返回“yes”,但如果有条件路径为 /home/user/data/database,它将返回“no”
Dockerfile:
# ------------- Dockerfile --------------
FROM python:3.11-slim-buster
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
RUN pip install --no-cache-dir asyncio aiogram scheduler mysql-connector-python pydantic-settings APScheduler pytz asyncio-scheduler pyTelegramBotAPI loguru requests
COPY . /usr/src/app
CMD \["python", "./main.py"\]
路径:
/home/lost0/data/database - 不起作用
/home/lost0/data/logs - 它有效
你是如何启动docker容器的?当你通过“docker run”启动docker容器时,你是否传递了-v选项?
docker容器内的进程可以访问文件系统,与主机隔离。如果你想让 docker 容器内的程序接触主机中的文件,你应该在启动 docker 容器时
docker run -v /home/user/data/:/home/user/data/ <your-image-name>
。
顺便说一句,请在大多数情况下不要使用 chmod 777。这不是一个好主意。