【发布时间】:2021-01-12 15:56:47
【问题描述】:
我在 docker 中运行 Django,我想从主机读取文件。我在 docker-compose 文件中使用以下命令将主机中的路径挂载到容器:
volumes:
- /path/on/host/sharedV:/var/www/project/src/shV
然后我执行 mongodump 并将集合导出到主机上的 sharedV 中。之后,我检查 web 容器并转到容器中的 shV 目录,我可以看到备份文件。但是,当我在 django 中运行 os.listdir(path) 时,结果是空列表。换句话说,我可以访问 Django 中的 sharedV 目录,但我看不到它的内容!
这是容器检查的 Mount 部分:
"Mounts": [
{
"Type": "bind",
"Source": "/path/on/host/sharedV",
"Destination": "/var/www/project/src/shV",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
]
是否知道如何从正在运行的容器访问主机?
谢谢
【问题讨论】:
-
这是访问共享目录的方式。会不会是权限问题?您要访问的文件夹和文件的权限是什么?有时 windows 权限不能很好地转换为 linux 权限...'
-
我的操作系统是ubuntu,sharedV有读写权限。
-
左侧部分必须是 real 路径,而不是“/path/on/host/sharedV” - 在您的 Ubuntu 中验证您的真实位置并提供它 -例如
./dir:/var/www/project/src/sharedV,其中./dir在您的 docker-compose.yml 所在的当前目录中 - 如果您知道绝对路径,请指定它。当然它不会知道“主机上的路径”是什么意思。 -
Tnx @urbanespaceman。我将容器检查的 Mount 部分添加到问题中。
-
谢谢@dmitryro。 “/path/on/host/sharedV”是我的 ubuntu 中的真实路径。正如我所说,当我运行“docker exec -it container bash”并转到 Web 容器时,我可以看到“shv”文件夹及其内容(导出的文件)。但是,当我从 django 运行 os.listdir(path) 时,“shv”的内容是空的!
标签: django docker docker-compose docker-volume docker-container