【问题标题】:boot2docker startup script to mount local shared folder with hostboot2docker 启动脚本与主机挂载本地共享文件夹
【发布时间】:2014-10-29 20:23:30
【问题描述】:

我在 Win7 上运行 boot2docker 1.3。

我想连接一个共享文件夹。

在 VirtualBox 管理器的图像属性-> 共享文件夹下,我添加了我想要的文件夹并将其命名为“c/shared”。选中“自动安装”和“永久安装”框。

当 boot2docker 启动时,它并没有被挂载。我必须做一个额外的:

sudo mount -t vboxsf c/shared /c/shared

让它出现。 因为我每次使用 docker 时都需要它,所以我希望它只是在启动时运行,或者已经在那里。所以我想如果我可以添加一些启动脚本,但我似乎无法找到它会在哪里。

谢谢

编辑:这是在向我大喊这是 Boot2Docker on Mac - Accessing Local Files 的副本,这是一个不同的问题。我想挂载一个不是默认文件夹之一的文件夹,例如 OSX 上的 /User 或 Windows 上的 /c/Users 。我特意要了启动脚本。

【问题讨论】:

标签: windows docker boot2docker


【解决方案1】:

/var/lib/boot2docker/bootlocal.sh 可能符合您的需要,它将由初始脚本/opt/bootscripts.sh 运行

bootscripts.sh也会把输出放到/var/log/bootlocal.log,见下段(boot2docker 1.3.1版本)

# Allow local HD customisation
if [ -e /var/lib/boot2docker/bootlocal.sh ]; then
   /var/lib/boot2docker/bootlocal.sh > /var/log/bootlocal.log 2>&1 &
fi 

我的一个用例是

我一般把shared目录写成/c/Users/larry/shared,然后我加脚本

#/bin/bash
ln -s  /c/Users/larry/shared /home/docker/shared

所以每次我都可以在boot2docker中访问~/shared,就像在host中一样

FAQ.md(@KCD 提供)

【讨论】:

  • 使用 docker 版本 1.6.2,每次我编辑 /opt/bootlocal.sh 以添加启动命令时,它在重新启动时消失。
  • 应该是 /var/lib/boot2docker/boot2docker.sh,我不知道为什么 @user3699741 编辑了我对错误指示的答案。
  • 成功了!!!一个QQ:我的主机上的符号链接/var/lib/boot2docker映射到哪里?
  • @EricManley,不确定您指的是哪台主机?如果是windows,不,它只存在于docker主机中。
【解决方案2】:

如果使用 boot2docker (Windows),您应该执行以下操作:

首先为 boot2docker 虚拟机创建共享文件夹:

"C:/Program Files/Oracle/VirtualBox/VBoxManage" sharedfolder add default -name some_shared_folder -hostpath /c/some/path/on/your/windows/box

#Then make this folder automount 
docker-machine ssh
vi /var/lib/boot2docker/profile

在配置文件末尾添加以下内容:

sudo mkdir /windows_share
sudo mount -t vboxsf some_shared_folder /windows_share

重启 docker-machine

docker-machine restart

验证文件夹内容在 boot2docker 中是否可见:

docker-machine ssh
ls -al /windows_share

现在您可以使用 docker run 或 docker-compose 挂载文件夹。 例如:

docker run it --rm --volume /windows_share:/windows_share ubuntu /bin/bash
ls -al /windows_share

如果配置文件中的更改在 VM 或 Windows 重新启动后丢失,请执行以下操作:

1) 编辑文件 C:\Program Files\Docker Toolbox\start.sh 并注释掉以下行:

#line number 44 (or somewhere around that)
yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"

#change the line above to:
#  yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"

【讨论】:

    【解决方案3】:

    感谢您对此的帮助。为了让 boot2docker "docker" 用户可以访问新的挂载,我需要添加一些额外的标志:

    sudo mount -t vboxsf -o umask=0022,gid=50,uid=1000 Ext-HD /Volumes/Ext-HD
    

    【讨论】:

      【解决方案4】:

      我无法按照 Larry Cai 的指示让它工作。我想我可以更改“c:\Program Files\Boot2Docker for Windows\start.sh”,在下面添加

      eval "$(./boot2docker.exe shellinit 2>/dev/null | sed 's,\\,\\\\,g')"

      你的挂载命令

      eval "$(./boot2docker ssh 'sudo mount -t vboxsf c/shared /c/shared')"

      我还在此处添加了启动容器的命令。

      eval "$(docker start KDP)"

      【讨论】:

        【解决方案5】:

        使用 docker 1.3,您不再需要手动挂载。只要主机 vm 上的源位于您的用户目录中,卷就应该可以正常工作。

        https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/

        【讨论】:

        • 是的,用户目录是自动挂载在 /c/Users 的。我想在 /c/shared 中添加一个目录。我可以得到它,但我总是必须挂载它,即使它已添加到虚拟机的共享文件夹中,就在用户文件夹旁边。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多