使用docker时,我无法从Django访问挂载目录



我在docker中运行Django,我想从主机读取一个文件。我在docker compose文件中使用以下命令将主机中的路径挂载到容器:

volumes:     
- /path/on/host/sharedV:/var/www/project/src/shV

然后我执行mongodump并将集合导出到主机上的sharedV中。之后,我检查web容器,并转到容器中的shV目录,我可以看到备份文件。然而,当我在django中运行os.listdir(path)时,结果是空列表。换句话说,我可以访问Django中的sharedV目录,但看不到它的内容!这是集装箱检查的安装部分:

"Mounts": [           
{
"Type": "bind",
"Source": "/path/on/host/sharedV",
"Destination": "/var/www/project/src/shV",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
]

有什么想法可以让我从一个正在运行的容器访问主机吗?

感谢

这对我很有效,旨在给你一种感知项目树

.
├── app
│   ├── dir
│   ├── file.txt
│   └── main.py
├── dir
│   └── demo.txt
├── docker-compose.yml
└── Dockerfile

Dockerfile

# Dockerfile
FROM python:3.7-buster
RUN mkdir -p /app
WORKDIR /app

RUN useradd appuser && chown -R appuser /app
USER appuser

CMD [ "python", "./main.py" ]

码头工人组成

version: '2'
services:
api:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
volumes:
- ./app:/app/
- ./dir:/app/dir

主.py

if __name__ == '__main__':
path = './dir'
dir = os.listdir(path)
print(f'Hello', dir)

打印

Hello ['demo.txt']

最新更新