Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Django docker组装在docker机器内,可';t装载量_Django_Docker_Docker Compose_Docker Machine - Fatal编程技术网

Django docker组装在docker机器内,可';t装载量

Django docker组装在docker机器内,可';t装载量,django,docker,docker-compose,docker-machine,Django,Docker,Docker Compose,Docker Machine,我有一个简单的网站应用程序,它使用Django、postgresql。我的小项目的结构如下所示: . ├── docker-compose.yml └── web ├── authentication ├── bower.json ├── Dockerfile ├── manage.py ├── requirements.txt ├── static └── trello_copy 当我只使用docker compose构建这个时,一切都

我有一个简单的网站应用程序,它使用Django、postgresql。我的小项目的结构如下所示:

.
├── docker-compose.yml
└── web
    ├── authentication
    ├── bower.json
    ├── Dockerfile
    ├── manage.py
    ├── requirements.txt
    ├── static
    └── trello_copy
当我只使用docker compose构建这个时,一切都很好。我创建了我的docker机器并连接到它们,然后使用与以前完全相同的命令:

docker-compose build
docker-compose up
事实证明,docker并没有将我的web文件夹复制到web容器中,他只是在代码中创建了代码文件夹和web文件夹,但web文件夹是空的

docker-compose.yml

postgres:
  image: postgres
  volumes:
    - /var/docker/postgresql:/var/lib/postgresql/data
  ports:
    - "5432:5432"

web:
  build: ./web
  volumes:
    - ./web:/code
  ports:
    - "8000:8000"
  links:
    - postgresql:postgresql
  command: bash -c "python manage.py runserver 0.0.0.0:8000"
Dockerfile

FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
我需要使用docker机器进行调试(PyCharm)

更新

我找到了解决方案(仅适用于web)。首先,您需要在VirtualBox中使用sharedfolder

VBoxManage sharedfolder add <machine_name> --name <mount_name> --hostpath <host_path_to_folder_you_want_to_share>
例如:

mkdir -p <vm_path>
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <vm_path>
mkdir-p
mount-t vboxsf-o默认值,uid=`id-u docker`,gid=`id-g docker`
这对我的web项目很有效,但当我对postgresql使用相同的方法时,它不起作用,原因是装入的文件夹与postgres(本例中为Docker)具有不同的所有权,并且postgresql不会启动


我发现这里考虑了这个问题

您的项目目录在
C:\users
(Windows)或
/users
(OS X)中吗?或者位于您计算机上的其他位置?这不起作用的原因是docker machine创建的vm主机对我的本地文件系统一无所知。当我使用docker compose时,docker-compose.yml中的volumes部分指向我的vm主机,因此这将永远无法正常工作。我可以使用docker machine scp命令将我的项目复制到vm主机上,但这毫无意义,因为每次更改源代码时我都必须这样做。我试图在本地主机和虚拟机主机之间共享我的项目文件夹,但没有成功-虚拟机主机没有看到我的共享文件夹。实际上,它确实与虚拟机共享了您主机中的文件;默认情况下,docker machine/boot2docker设置虚拟机通过虚拟盒文件共享
C:\Users
/
/Users
目录;
/mnt/var/lib/boot2docker/bootlocal.sh
mkdir -p <vm_path>
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <vm_path>