【问题标题】:I can not access to mount directory from Django when using docker使用 docker 时,我无法从 Django 访问挂载目录
【发布时间】: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


【解决方案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

main.py

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

打印

Hello ['demo.txt']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多