1

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

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

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

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

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

谢谢

4

1 回答 1

1

这对我有用,给你一个感知项目树

.
├── 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

主文件

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

印刷

Hello ['demo.txt']
于 2020-09-26T19:32:19.480 回答