gpt4 book ai didi

docker - 如何在 docker 机器上挂载本地卷

转载 作者:IT老高 更新时间:2023-10-28 12:33:38 26 4
gpt4 key购买 nike

我正在尝试将 docker-machine 与 docker-compose 一起使用。 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 时一切顺利,直到尝试执行命令并产生错误:

Cannot start container b58e2dfa503b696417c1c3f49e2714086d4e9999bd71915a53502cb6ef43936d: [8] System error: exec: "./run_web.sh": stat ./run_web.sh: no such file or directory

本地卷未安装到远程计算机。使用 webapps 代码挂载本地卷的推荐策略是什么?

最佳答案

Docker-machine 自动挂载用户目录...但有时这还不够。

我不知道 docker 1.6,但在 1.8 中,您可以向 docker-machine 添加一个额外的挂载

添加虚拟机挂载点(第 1 部分)

CLI:(仅在机器停止时有效)

VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount

所以windows中的一个例子是

/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount

GUI:(不需要停止机器)

  1. 启动“Oracle VM VirtualBox Manager”
  2. 右击<machine name> (默认)
  3. 设置...
  4. 共享文件夹
  5. 右侧的文件夹+ 图标(添加共享)
  6. 文件夹路径:<host dir> (e:)
  7. 文件夹名称:<mount name> (e)
  8. 选中“自动挂载”和“永久设置”(如果需要,请只读...)(自动挂载目前有点毫无意义...)

在 boot2docker 中安装(第 2 部分)

在boot2docker中手动挂载:

  1. 有多种登录方式,使用“Oracle VM VirtualBox Manager”中的“Show”,或者通过IP地址docker-machine ip default ssh/putty进入docker等...
  2. sudo mkdir -p <local_dir>
  3. sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>

但这只有在你重新启动机器之前是好的,然后挂载丢失了......

向 boot2docker 添加自动挂载:

登录机器时

  1. 编辑/创建(以 root 身份)/mnt/sda1/var/lib/boot2docker/bootlocal.sh , sda1 对你来说可能不同...
  2. 添加

    mkdir -p <local_dir>
    mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>

通过这些更改,您应该有一个新的挂载点。这是我能找到的少数几个在启动时调用并且是持久的文件之一。在有更好的解决方案之前,这应该可行。


旧方法:不太推荐,但留作备用

  • 编辑(以 root 身份)/mnt/sda1/var/lib/boot2docker/profile , sda1 对你来说可能不同...
  • 添加

    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 clone https://github.com/boot2docker/boot2docker.git
  • cd boot2docker
  • git -c core.autocrlf=false checkout v1.8.1 #或您的适当版本
  • 编辑 rootfs/etc/rc.d/automount-shares
  • 添加 try_mount_share <local_dir> <mount_name>在最后的 fi 之前的一行。例如

    try_mount_share /e e

    请确保不要将 设置为操作系统需要的任何内容,例如/bin 等...

  • docker build -t boot2docker . #第一次大约需要一个小时:(
  • docker run --rm boot2docker > boot2docker.iso
  • 备份旧的 bo​​ot2docker.iso 并将新的 boot2docker.iso 复制到 ~/.docker/machine/machines/中的位置

这确实有效,只是冗长而复杂

docker 版本 1.8.1,docker-machine 版本 0.4.0

关于docker - 如何在 docker 机器上挂载本地卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30040708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com