Docker Desktop for Mac OSCatalina Mount SD Card Volume in Container as loop device to flash SD Card with dd

Docker Desktop for Mac OSCatalina Mount SD Card Volume in Container as loop device to flash SD Card with dd

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

我该怎么做?谢谢。

注意:我尝试了以下方法,不幸的是它仍然不起作用:

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目录:

我认为这会起作用:

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

然后:

dd if=/dev/random of=/dev/disks2

您还需要在您的 docker 配置中共享 /dev,我认为除了使用 --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.