Mac で Docker から USB デバイスにアクセスする方法
tl; dr
Docker for Mac ではできないが、docker-machine を使えばできる
- virtualbox をインストール
- docker-machine で仮想マシン(以下 VM)を作る
- VM に USB デバイスをアタッチする
詳細
- virtualbox をインストール
brew cask install virtualbox
brew cask install virtualbox-extension-pack
- USB 2.0 以上を利用するために必要
- docker-machine で VM を作る
docker-machine create -d virtualbox vbox
- VM に USB デバイスをアタッチする
- VM を一旦止める
docker-machine stop vbox
- VM の USB xHCI を有効にする
VBoxManage modifyvm vbox --usbxhci on
- USB デバイスを一覧して VendorId, ProductId を得る
VBoxManage list usbhost
- VM に USB Device Filter を追加する
VBoxManage usbfilter add 1 --target vbox --name 'SanDisk Cruzer Colors+' --vendorid 0x0781 --productid 0x5170
--name
は何でもよい。上記例はManufacturer
,Product
の出力を参考にしている。
- VM を起動する
docker-machine start vbox
- VM を一旦止める
確認
確認のために fdisk を実行してみる
[10:36:04] ~ (*'-') < docker $(docker-machine config vbox) run -it --rm --privileged debian root@6bc97aaa2212:/# lsblk -o +VENDOR,MODEL NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT VENDOR MODEL sda 8:0 0 19.5G 0 disk ATA VBOX HARDDISK |-sda1 8:1 0 18.6G 0 part /etc/hosts `-sda2 8:2 0 964.8M 0 part [SWAP] sdb 8:16 1 3.8G 0 disk SanDisk Cruzer Colors+ sr0 11:0 1 48M 0 rom VBOX CD-ROM zram0 251:0 0 177.1M 0 disk [SWAP] root@6bc97aaa2212:/# root@6bc97aaa2212:/# fdisk /dev/sdb Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x0b7a7d6f. Command (m for help): p Disk /dev/sdb: 3.8 GiB, 4022337024 bytes, 7856127 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0b7a7d6f
経緯
USB メディアに対して syslinux コマンドを使いたかったのだけど OS X で動かすの大変そうだったので docker から操作できたら便利だなあと思って調べていた