はじめに
ロボット開発などでUSBデバイスをDockerコンテナで使うために、以下のように--device
オプションを使って
USBデバイスをコンテナにマウントすることがあるが、USBデバイスが接続されていないときは docker container start
でコンテナを起動できない。
docker run --rm -it --device=/dev/ttyUSB0:/dev/ttyUSB0 ubuntu bash
/dev/ttyUSB0がないとき
$ docker run --rm -it --device=/dev/ttyUSB0:/dev/ttyUSB0 ubuntu bash
docker: Error response from daemon: error gathering device information while adding custom device "/dev/ttyUSB0": no such file or directory.
そこでsocatを使って仮想シリアルデバイスを作ることで、USBデバイスが接続されていない状態でもDockerコンテナが起動できるようにする。
socatのインストール
sudo apt update
sudo apt install socat
仮想シリアルデバイスの作成
sudo socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,raw,echo=0
docker run する
docker run --rm -it --device=/dev/ttyUSB0:/dev/ttyUSB0 ubuntu bash
docker コンテナで/dev一覧を見るとttyUSB0
があることが分かる。
root@21092250cb7d:/# ls /dev
console core fd full mqueue null ptmx pts random shm stderr stdin stdout tty ttyUSB0 urandom zero
参考