如何在docker机器中装载本地卷
我正在尝试使用docker编写的docker机器。docker-compose.yml文件的定义如下:如何在docker机器中装载本地卷,docker,dockerfile,docker-compose,Docker,Dockerfile,Docker Compose,我正在尝试使用docker编写的docker机器。docker-compose.yml文件的定义如下: web: build: . command: ./run_web.sh volumes: - .:/app ports: - "8000:8000" links: - db:db - rabbitmq:rabbit - redis:redis 运行docker compose up-d时,一切正常,直到尝试执行命令并产生错误: 无法
web:
build: .
command: ./run_web.sh
volumes:
- .:/app
ports:
- "8000:8000"
links:
- db:db
- rabbitmq:rabbit
- redis:redis
运行docker compose up-d
时,一切正常,直到尝试执行命令并产生错误:
无法启动容器B58E2DFA503B696417C1C3F49E2714086D4E99BD71915A53502CB6EF43936D:[8]系统错误:exec:“./run_web.sh”:stat./run_web.sh:没有这样的文件或目录
本地卷未装入远程计算机。使用webapps的代码装载本地卷的推荐策略是什么?我假设
run\u web.sh
文件与您的docker compose.yml
文件位于同一目录中。然后命令应该是command:/app/run\u web.sh
除非
Dockerfile
(您没有透露)负责将run\u web.sh
文件放入Docker映像。也遇到此问题,并且在使用Docker机器时似乎没有装入本地卷。黑客解决方案是
docker machine ssh pwd
rsync
将文件夹复制到远程系统
rsync -avzhe ssh --progress <name_of_folder> username@remote_ip:<result _of_pwd_from_1>.
rsync-avzhe-ssh——进度username@remote_ip:.
rsync-avzhe-ssh--progressusername@remote_ip:/root
注意:您需要提供远程系统的密码。您可以通过ssh将其快速创建到远程系统并创建密码
docker compose.yml
文件中的卷装入点从:/app
更改为/root/:/app
docker compose up-d
rsync
将更改推送到远程系统
这不是完美的,但很有效。一个问题正在发生
另一个试图解决这个问题的项目包括,目前我真的看不到在机器上装载卷的任何方法,所以现在的方法是以某种方式将需要的文件复制或同步到机器中 关于如何在docker机器的github repo上解决这个问题,有很多讨论。有人在docker机器上做了一个实现,它已经在master上合并了,所以下一个版本很可能会包括它 因为它还没有发布,所以现在我建议如果你的代码托管在github上,在运行应用程序之前只需克隆你的repo
web:
build: .
command: git clone https://github.com/my/repo.git; ./repo/run_web.sh
volumes:
- .:/app
ports:
- "8000:8000"
links:
- db:db
- rabbitmq:rabbit
- redis:redis
更新:进一步查看,我发现该功能已在中可用,当您获得它们时,您将能够运行以下命令复制您的本地项目:
docker-machine scp -r . dev:/home/docker/project
作为一般形式:
docker-machine scp [machine:][path] [machine:][path]
因此,您可以在计算机之间复制文件
干杯!1Docker机器自动装载用户目录。。。但有时这还不够 我不知道docker 1.6,但在1.8中,您可以向docker机器添加额外的挂载 添加虚拟机装载点(第1部分) CLI:(仅在机器停止时工作)
vboxmanagesharedfolderadd--name--hostpath--automount
因此,windows中的一个示例是
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount
GUI:(不需要停止机器)
(默认)
(e:)
(e)docker机器IP默认值
,等等sudo mkdir-p
sudo mount-t vboxsf-o默认值,uid=`id-u docker`,gid=`id-g docker`
/mnt/sda1/var/lib/boot2docker/bootlocal.sh
,sda1对您来说可能不同mkdir -p <local_dir>
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>
add_mount() {
if ! grep -q "try_mount_share $1 $2" /etc/rc.d/automount-shares ; then
echo "try_mount_share $1 $2" >> /etc/rc.d/automount-shares
fi
}
add_mount <local dir> <mount name>
git-c core.autocrlf=false克隆https://github.com/boot2docker/boot2docker.git
cd boot2docker
git-c core.autocrlf=false checkout v1.8.1或相应版本
- 编辑
rootfs/etc/rc.d/automount共享
- 在末尾的fi前面添加
行。比如说try\u mount\u share
请确保不要将设置为操作系统需要的任何内容,如/bin等try_mount_share /e e
#第一次大约需要一个小时:(docker build-t boot2docker.
docker运行--rm boot2docker>boot2docker.iso
- 备份旧的boot2docker.iso并在~/.docker/machine/machines中复制新的boot2docker.iso/
docker版本1.8.1,docker机器版本0.4.0在此总结文章后,附加更新脚本,以创建附加主机装载点并在Virtualbox重新启动时自动装载。工作环境简述如下: -视窗7 -docker-machine.exe版本0.7.0 -VirtualBox 5.0.22
#!env bash
: ${NAME:=default}
: ${SHARE:=c/Proj}
: ${MOUNT:=/c/Proj}
: ${VBOXMGR:=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe}
SCRIPT=/mnt/sda1/var/lib/boot2docker/bootlocal.sh
## set -x
docker-machine stop $NAME
"$VBOXMGR" sharedfolder add $NAME --name c/Proj --hostpath 'c:\' --automount 2>/dev/null || :
docker-machine start $NAME
docker-machine env $NAME
docker-machine ssh $NAME 'echo "mkdir -p $MOUNT" | sudo tee $SCRIPT'
docker-machine ssh $NAME 'echo "sudo mount -t vboxsf -o rw,user $SHARE $MOUNT" | sudo tee -a $SCRIPT'
docker-machine ssh $NAME 'sudo chmod +x /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
docker-machine ssh $NAME 'sudo /mnt/sda1/var/lib/boot2docker/bootlocal.sh'
#docker-machine ssh $NAME 'ls $MOUNT'
如果在docker machine中选择rsync选项,则可以将其与
docker machine ssh
命令结合使用,如下所示:
docker-machine scp -r . dev:/home/docker/project
rsync-rvz--rsh='docker-machine-ssh'--进度:
It u
inotifywait -r -m -e close_write --format '%w%f' /home/jdcaballerov/web | while read CHANGED_FILE
do
rsync /home/jdcaballerov/web /tmp/some_random_dir
done