macos - 用于 Macos Catalina 的 Docker 桌面在容器中挂载 SD 卡卷作为循环设备以使用 dd 闪存 SD 卡

标签 macos docker virtual-machine ubuntu-18.04 docker-machine

我正在使用 Docker Desktop for Mac 版本 2.1.0.4。我有一个 Docker 容器,它是一个 Ubuntu 18.04 Linux VM,里面有 Yocto Build 系统。我用它为我的 NVIDIA Jetson Nano 生成 SD 卡。在构建过程结束时,我有 *.img 文件,我可以直接将其“dd”到 SD 卡并用于启动我的 Jetson Nano。我希望 Docker 容器从 MacBook 挂载 SD 卡卷,以便它可以从容器内部直接 dd 到 SD 卡,而不是从我的 Mac 终端手动复制和运行“dd”。我通常会通过在 Linux 中安装(未安装的)/dev/sdX 设备作为带有 losttup 的循环设备,然后运行“dd”来做到这一点。

通过使用以下命令启动容器,我可以成功挂载 SD 卡并查看容器内的内容:

MacBook-Pro:~ me$ docker run -it -v /Volumes/pkop:/opt/myvolume jetson-nano bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

root@c4102f7124d4:~/Desktop/jetson-yocto$ ls /opt/myvolume/
a.txt  b.xt  lost+found

我可以将文件从 Mac 或 Container 写入此共享卷,并从两个角度查看更改。

但是,我无法弄清楚(或在 Google 上找到)如何卸载共享卷(因此它不在容器中使用)并能够直接“dd”到它。

我怎样才能做到这一点?谢谢。

enter image description here

enter image description here

注意:我尝试了以下方法,不幸的是它仍然不起作用:
MacBook-Pro:~ me$ mount
...
/dev/disk2s2 on /Volumes/BOOT (msdos, local, nodev, nosuid, noowners)
MacBook-Pro:~ me$ sudo diskutil unmount /dev/disk2s2
Password:
Volume BOOT on disk2s2 unmounted
MacBook-Pro:~ me$ sudo mkdir -p /tmp/sd
MacBook-Pro:~ me$ sudo diskutil mount -mountPoint /tmp/sd /dev/disk2s2
Volume BOOT on /dev/disk2s2 mounted
MacBook-Pro:~ me$ docker images
REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE
vsc-jetsonnanobuildsystem-7dbcb92dddcd1879ee470cf5cbe42494   latest              661fca4aff22        10 hours ago        270GB
MacBook-Pro:~ me$ 
MacBook-Pro:~ me$ docker run -i -t -v /tmp/sd:/opt/usb vsc-jetsonnanobuildsystem-7dbcb92dddcd1879ee470cf5cbe42494 bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

user@9bcdaf6469be:~/Desktop/jetson-yocto$ ls /opt/usb/
a
user@9bcdaf6469be:~/Desktop/jetson-yocto$ dd if=/dev/random of=/opt/usb
dd: failed to open '/opt/usb': Is a directory

此外,似乎我无法共享/dev 目录:

enter image description here

最佳答案

我认为这会起作用:

docker run -v /dev:/dev --privileged YOURIMAGE bash

然后 :
dd if=/dev/random of=/dev/disks2

您还需要分享/dev在您的 docker 配置中,我认为除了使用 --privileged 之外共享它是有风险的。参数 .....

如果您不共享/dev,您将收到以下消息:
docker: Error response from daemon: Mounts denied:
The path /dev/disk1s2
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.

关于macos - 用于 Macos Catalina 的 Docker 桌面在容器中挂载 SD 卡卷作为循环设备以使用 dd 闪存 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58894153/

相关文章:

C++/XCode - 如何生成 pdf?

docker - 如何在 Docker Compose 中添加 $(...) :$(. ..)

android - VMWare 中的 Intel HAXM 安装错误

virtual-machine - Vix vmrun不适用于VMware Player

swift - 打印网页第一面 View 不同

bash - 从字符串中删除最后 n 个字符的单行方法

centos - 如何在 CentOS 7 上安装 docker?

wordpress - 如何在docker-compose.yml中运行wp cli

asp.net - CaliEventHandlerDelegateProxy 泄漏

ruby-on-rails - 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误