我在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']