Docker 是一款開(kāi)源容器平臺(tái),以其輕量級(jí)、高效、方便等特點(diǎn)而備受歡迎。Docker 已經(jīng)成為了容器領(lǐng)域的翹楚,越來(lái)越多的開(kāi)發(fā)者使用 Docker 作為其開(kāi)發(fā)調(diào)試環(huán)境,但是 Docker 串口權(quán)限一直是一個(gè)比較麻煩的問(wèn)題。
在 Docker 中,要想使用串口,需要先在宿主機(jī)中賦予 Docker 權(quán)限。在 Linux 系統(tǒng)中,將 /dev/ttyUSB0 或者 /dev/ttyS0 串口設(shè)備授權(quán)給 Docker 用戶(這里假設(shè) Docker 用戶 ID 為 1001)的操作命令如下:
sudo chmod a+rw /dev/ttyUSB0 sudo usermod -aG dialout 1001
上面的命令將串口設(shè)備的權(quán)限修改為所有人可讀寫(xiě)。同時(shí)將 Docker 用戶加入到 dialout 用戶組中,dialout 組下的用戶擁有對(duì)串口設(shè)備的訪問(wèn)權(quán)限。
另外在 Docker 容器中,默認(rèn)是沒(méi)有串口設(shè)備的,需要通過(guò)指定 --device 參數(shù)將本地串口設(shè)備映射到容器內(nèi):
docker run --device=/dev/ttyUSB0 mydockerimage
上面的命令中,我們將宿主機(jī)的 /dev/ttyUSB0 設(shè)備映射到容器的 /dev/ttyUSB0。這一步映射操作需要在 Dockerfile 中定義,如下:
FROM myubuntuimage RUN usermod -aG dialout 1001 ENTRYPOINT ["my_entrypoint_script.sh"] CMD ["--device=/dev/ttyUSB0"]
上述 Dockerfile 文件首先繼承了本地的 Ubuntu 鏡像,通過(guò) RUN 命令將 Docker 用戶加入到 dialout 組中,接著定義了容器啟動(dòng)的 entrypoint 命令以及默認(rèn)的 CMD 參數(shù),在啟動(dòng)容器時(shí)就不需要再指定 --device 參數(shù)了。
通過(guò)以上的配置,我們就可以在 Docker 容器內(nèi)使用串口,實(shí)現(xiàn)我們所需要的業(yè)務(wù)功能了。