Django docker组装在docker机器内,可';t装载量
我有一个简单的网站应用程序,它使用Django、postgresql。我的小项目的结构如下所示: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构建这个时,一切都
.
├── 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>