如何在docker机器中挂载本地卷

2023-11-29

我正在尝试将 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一切顺利,直到尝试执行命令并产生错误:

无法启动容器 b58e2dfa503b696417c1c3f49e2714086d4e9999bd71915a53502cb6ef43936d: [8] 系统错误: exec: "./run_web.sh": stat ./run_web.sh: 没有这样的文件或目录

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


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

我不知道 docker 1.6,但在 1.8 中你CAN添加一个额外的安装到 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 管理器”
  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地址ssh/putty进入dockerdocker-machine ip default, etc...
  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. Add

    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

    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>
    

As a 最后一招,您可以采取稍微繁琐的替代方案,只需修改启动映像即可。

  • git -c core.autocrlf=false clone https://github.com/boot2docker/boot2docker.git
  • cd boot2docker
  • git -c core.autocrlf=false checkout v1.8.1#或您合适的版本
  • Edit rootfs/etc/rc.d/automount-shares
  • Add 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 并将新的复制到 ~/.docker/machine/machines/ 中的位置

这确实有效,只是又长又复杂

docker 版本 1.8.1,docker-machine 版本 0.4.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在docker机器中挂载本地卷 的相关文章

随机推荐

  • 编码 javascript url 以传递 #(hashtag)

    我将 URL 传递给 PHP 文件 在其中更改一些颜色等 其中一种颜色是 ccc并被传递为 background ccc这破坏了我的 PHP 文件 它停止了我的 GET该主题标签处的参数 之后的所有内容都不会传递 我尝试将我的网址编码为en
  • 反射式 Web 应用程序 (WebIDE)

    Preamble 所以 这个问题已经得到了解答 但由于这是我对该项目的第一个问题 我将继续在我对该项目提出的其他问题中引用它 对于来自另一个问题的任何人 以下是基本想法 创建一个 Web 应用程序 可以使创建其他 Web 应用程序或网站变得
  • 在 Fortran 中查找数组中满足条件的最小值[索引]

    我正在寻找数组中大于某个数字的最小值 我发现这次讨论我不明白 有MINLOC 但看起来它本身并没有达到我想要的效果 尽管我没有解析给定示例中传递给它的参数 也可以使用循环来完成此操作 但可能很笨拙 你可能想要MINVAL 如果你的数组是这样
  • 在处理程序中创建了一个 Promise,但没有从中返回

    我刚刚开始使用 Bluebird Promise 但遇到了一个令人困惑的错误 代码摘要 var jQueryPostJSON function jQueryPostJSON url data return Promise resolve j
  • D3 Y 轴似乎颠倒了

    我正在尝试根据 CSV 文件中的一些数据生成图表 My code
  • 如何检测 Azure 网站上的 HTTPS 重定向?

    根据标题 我有一个 Node js 应用程序 我希望能够检测请求是通过 HTTPS 还是 HTTP 发出 到目前为止我的重定向看起来像这样 Ensure the page is secure or that we are running a
  • 列表中的数据表

    我已经下载了包含在List
  • Java中如何处理关闭应用程序事件?

    拥有一个控制台应用程序 一个接受来自客户端的多个连接的服务器 是否可以在关闭的应用程序上拥有侦听器或事件 在这种情况下 我希望告诉所有连接的客户端在应用程序真正自行关闭之前轻轻断开连接 有什么解决办法吗 谢谢你 您想使用关闭挂钩 Runti
  • 在Win32中,如何改变STATIC文本的颜色?

    我的窗口上有一些黑色的静态文本 我想在运行时使用颜色选择器对话框更改它 我已经成功获得了颜色 现在我只需要更改文字即可 我读过WM CTLCOLORSTATICmessage 是要处理的消息 尽管这似乎仅适用于控件最初绘制到屏幕上时 可以W
  • 更新 Firebase 多位置并出现错误:路径是路径的祖先。迅速

    当我尝试使用以下命令在多个位置更新数据库时 updateChildValues 我收到下面列出的错误 我怎么解决这个问题 由于未捕获的异常 InvalidFirebaseData 而终止应用程序 原因 updateChildValues 对
  • 自定义单元格模板中带有按钮的 UI-Grid - 如何取消行选择事件?

    我正在使用 ui Grid v 3 0 1 我有一个特定列的自定义单元格模板 它在每行中显示一个按钮 我附加了一个 ng click 属性 它调用 appScope 来触发某些操作 一切都很顺利 但是 单击自定义模板按钮也会导致切换相关行的
  • 未找到基表或视图错误

    产品表 public function up Schema create product function Blueprint table table gt increments id table gt string name table
  • 使用 ionic 3 中的 Angularfire2 从 Firestore 获取集合文档的 ID

    这个问题在这里已经有答案了 我正在尝试获取集合的 id 以在离子页面中使用它 这是我的界面 export interface Item categoryOfPost string imageUrl string nameOfPost str
  • 如何使用 Python 3.x 读取和编辑 Google 电子表格?

    我知道我可以使用以下命令阅读和编辑 Google 电子表格gdata 但没有适用于 Python 3 的 gdata 版本 即使我想使用 Python 3 是否有一种 不是很复杂 的方法来编辑 Google 电子表格 我编写了一个替代方案G
  • 如何在 ffmpeg HLS 中启用 cookie

    有人知道如何在 ffmpeg 中启用 cookie 交互吗 我有一个 HLS 流 需要从服务器保存 cookie 但实际上这不会发生 你可以发送标头与 FFmpeg Linux ffmpeg i INPUT headers Cookie l
  • PyQt QLineEdit 与 QValidator

    我的项目中有一个 QLineEdit 我想在 qlineEdit 上使用验证 Create lineEdit itemValue QtWidgets QLineEdit Create objValidator QtGui QDoubleVa
  • 如何逐步安装和使用 joomla rest api

    请帮忙 我想在 joomla 2 5 中使用 REST api 我在 Github 和 techjoomla 上进行了很多搜索并花了很多天 我不明白如何安装 API 扩展或插件并使用它 即使我没有找到任何正确的文档来使用 API 以及从哪里
  • 使用 XSLT 减少 XML 输出

    如何使用 XSLT 仅从输入 xml 中选择一些 xml 标签到输出 XML 输入示例
  • 设置属性logging.pattern.console或logging.pattern.level时忽略覆盖模式

    使用 spring boot 1 3 2 我试图覆盖 application properties 文件中的 logback 模式 但无论我放入什么模式 总是会调用 spring boot jar xml 中的默认模式 我可以成功调整日志记
  • 如何在docker机器中挂载本地卷

    我正在尝试将 docker machine 与 docker compose 一起使用 文件 docker compose yml 的定义如下 web build command run web sh volumes app ports 8