>  기사  >  운영 및 유지보수  >  Docker 가상 직렬 포트가 가능합니까?

Docker 가상 직렬 포트가 가능합니까?

PHPz
PHPz원래의
2023-04-25 15:56:391623검색

Docker는 많은 개발자와 시스템 관리자를 위한 일반적인 가상화 도구입니다. 수정 없이 모든 플랫폼에서 실행할 수 있는 컨테이너에 많은 애플리케이션을 패키징할 수 있습니다. 그러나 일부 애플리케이션 시나리오에서는 사용자가 직렬 포트나 직렬 장치를 사용해야 합니다. 그러면 Docker 가상 직렬 포트도 가능합니까?

Linux 운영 체제에서 직렬 포트 장치는 /dev/ttyS0 ~ /dev/ttyS3 장치 파일로 표시됩니다. 프린터, 모뎀, 디지털 미터 등과 같은 장치를 연결하는 데 사용할 수 있습니다. 직렬 포트는 간단하고 안정적인 통신 방법입니다. 그러나 Docker 내에서 Docker 컨테이너에는 자체 물리적 하드웨어 장치가 없으므로 기본적으로 물리적 직렬 포트 장치를 사용할 수 없습니다.

그러나 Docker는 호스트의 가상 또는 물리적 장치를 Docker 컨테이너 내부에 매핑하기 위해 "장치 매핑"이라는 메커니즘을 제공합니다. 이 경우 호스트 시스템의 직렬 장치를 Docker 컨테이너에 매핑하여 직렬 통신을 시뮬레이션할 수 있습니다.

Docker 컨테이너를 시작할 때 "--device" 옵션을 추가하여 장치 매핑을 수행할 수 있습니다. 예를 들어 다음 명령은 /dev/ttyUSB0 장치를 Docker 컨테이너의 /dev/ttyUSB0 장치 파일에 매핑합니다.

$ sudo docker run -it --name mycontainer --device=/dev/ttyUSB0 ubuntu:latest

컨테이너를 시작한 후 컨테이너 내부에서 다음 명령을 실행하여 컨테이너 내부에서 직렬 포트를 사용할 수 있는지 확인합니다. :

$ ls -l /dev/ttyUSB0

Docker 컨테이너 내에서 다음 명령을 실행하면 직렬 장치를 열려고 시도합니다.

$ minicom -D /dev/ttyUSB0

호스트에 직렬 드라이버가 설치되어 있지 않으면 컨테이너가 장치에 액세스할 수 없습니다. 따라서 컨테이너를 시작하기 전에 필요한 드라이버를 설치하십시오.

또한 장치 매핑을 사용하여 Docker 컨테이너에서 직렬 포트를 사용할 수 있지만 동시에 여러 직렬 장치를 연결해야 하는 경우 장치 매핑이 매우 까다로워지기 때문에 이상적인 솔루션은 아닙니다. 이 경우 더 나은 해결책은 가상 직렬 포트를 사용하는 것입니다.

가상 직렬 포트는 호스트 직렬 포트 장치를 가상 직렬 포트 장치에 매핑하여 직렬 포트 통신을 시뮬레이션하는 방법입니다. 이 가상 직렬 장치는 실제 직렬 장치처럼 보이지만 실제로는 호스트에 데이터를 전송하는 실제 직렬 장치일 뿐입니다. Docker 컨테이너에서는 socat 또는 ttyd와 같은 도구를 사용하여 가상 직렬 장치를 생성할 수 있습니다.

다음은 socat를 사용하여 가상 직렬 포트 장치를 생성하는 명령입니다.

$ sudo socat pty,link=/dev/ttyS0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0

이 명령을 실행하면 socat는 직렬 시뮬레이션에 사용할 수 있는 두 개의 가상 직렬 포트 장치 /dev/ttyS0 및 /dev/ttyS1을 생성합니다. 포트 통신.

그런 다음 Docker 컨테이너를 시작할 때 다음 명령을 사용하여 컨테이너 내부의 가상 직렬 포트를 매핑합니다.

$ sudo docker run -it --name mycontainer -v /dev/ttyS0:/dev/ttyS0 ubuntu:latest

컨테이너 내부에서 직렬 통신을 위해 /dev/ttyS0 장치를 열어볼 수 있습니다.

요약

Docker는 기본적으로 직렬 장치를 지원하지 않지만 장치 매핑이나 가상 직렬 장치를 사용하여 직렬 통신을 시뮬레이션할 수 있습니다. 솔루션을 선택할 때 여러 직렬 장치를 연결할 때 장치 매핑이 매우 번거로울 수 있지만 가상 직렬 포트를 사용하면 여러 직렬 포트 연결을 쉽게 달성할 수 있다는 점에 유의하세요.

위 내용은 Docker 가상 직렬 포트가 가능합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.