适用于Mac OS的Docker桌面Catalina将Container中的SD卡卷安装为循环设备以使用dd闪存SD卡

Phi*_*Bot 5 macos virtual-machine docker docker-machine ubuntu-18.04

我正在使用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卡,而不是从Mac终端手动复制并运行“ dd”。我通常通过在Linux中将(未安装的)/ dev / sdX设备挂载为具有Lostup的循环设备来执行此操作,然后运行“ 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
Run Code Online (Sandbox Code Playgroud)

我可以将文件从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
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

Lin*_*nPy 3

我认为这会起作用:

docker run -v /dev:/dev --privileged YOURIMAGE bash
Run Code Online (Sandbox Code Playgroud)

然后 :

dd if=/dev/random of=/dev/disks2
Run Code Online (Sandbox Code Playgroud)

你还需要共享/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.
Run Code Online (Sandbox Code Playgroud)