我有简单的网站应用程序,使用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文件夹是空的。
搬运工-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)。
更新
我找到了解决方案(仅适用于网络)。首先,您需要在VirtualBox中使用sharedfolder。
VBoxManage sharedfolder add <machine_name> --name <mount_name> --hostpath <host_path_to_folder_you_want_to_share>
然后你必须通过ssh连接到你的docker-machine vm主机并挂载这个文件夹。
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <path_in_you_vm_machine>
所以现在您的主机文件夹已安装在您的虚拟机主机<path_in_you_vm_machine>
上,但还有另一个问题。重新启动vm主机时,必须再次装入此文件夹。来自docs
boot2docker docs
我们可以读到有一个脚本在vm主机启动时被执行。您必须将此命令放在vm主机上的此文件中
/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>
这适用于我的web项目,但是当我使用相同的方法进行postgresql时,它不起作用,原因是mount文件夹的所有权不同于postgres(本例中为Docker),postgresql也无法启动。
我发现此问题在此处proposal machine share