Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ubuntu虚拟机上使用docker compose运行时,Python脚本无法访问用户主位置的目录_Python_Docker_Docker Compose_Vmware_Ubuntu 18.04 - Fatal编程技术网

在Ubuntu虚拟机上使用docker compose运行时,Python脚本无法访问用户主位置的目录

在Ubuntu虚拟机上使用docker compose运行时,Python脚本无法访问用户主位置的目录,python,docker,docker-compose,vmware,ubuntu-18.04,Python,Docker,Docker Compose,Vmware,Ubuntu 18.04,我试图使用docker compose从docker容器中运行的python脚本打开一个目录,该文件是应用程序的一部分,设置如下 OS:在VMWare上运行的Ubuntu 18.04 应用程序:在VMWare上Ubuntu操作系统之上的docker上运行 设置:应用程序使用名为“/application”的docker compose创建自己的目录,并在那里运行python脚本,该脚本将从用户主文件夹内的以下目录“/home/$user/repository”中读取一些文件 一段代码 repo_

我试图使用docker compose从docker容器中运行的python脚本打开一个目录,该文件是应用程序的一部分,设置如下

OS:在VMWare上运行的Ubuntu 18.04

应用程序:在VMWare上Ubuntu操作系统之上的docker上运行

设置:应用程序使用名为“/application”的docker compose创建自己的目录,并在那里运行python脚本,该脚本将从用户主文件夹内的以下目录“/home/$user/repository”中读取一些文件

一段代码

repo_base = '/home/vipin/repository'
repo_folder_path = os.path.join(repo_base, 'vectors', 'current')
listOfFiles = os.listdir(repo_folder_path)
错误

FileNotFoundError:[Errno 2]没有这样的文件或目录:'/home/vipin/repository/vectors/current'

我已经尝试从终端手动运行脚本,它工作完全正常,只有通过docker compose运行脚本时才会出现问题。


我正在使用sudo运行docker compose命令,也尝试从root用户运行它,但没有效果。如果您有任何帮助,我们将不胜感激。

Docker容器运行的命名空间不同,默认情况下,它将无法访问主机驱动器。 您需要使用“卷”才能访问主机驱动器并将其装载到容器中

例如:

  db:
    image: postgres:latest
    container_name: my_db
    #pg_hba.conf configure this file
    environment:
      - POSTGRES_USER=me
      - POSTGRES_PASSWORD=nothing
      - POSTGRES_DB=mydb
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data/
更多:

据我所知,您这样做是
-v/home/$user/repository:/application
那么您需要使用:
repo_base='/application'
在您的代码中是目录-
/home/vipin/repository
在主机(Ubuntu)内部还是在Docker容器内部?@Shiva:目录在主机内部。Docker容器提供了一层隔离,而且无法直接访问主机文件系统上的内容。在这种情况下,“主机”是一个提供隔离层的VM,它不能直接访问其主机系统上的内容。如果用户在物理系统上的主目录很重要,那么不要在VM中使用Docker;使用重量较轻的系统,如Python虚拟环境,可以直接访问主机文件。如上所述,包括问题中的
Dockerfile
docker compose.yml
文件,以及了解如何在VM上配置文件共享,将非常有助于进一步诊断此问题。谢谢,确实缺少卷信息:)