Python 코드를 작성하면서 시각화할 수 있도록 X11 서버를 실행하는 Docker 컨테이너를 실행하는 방법을 알아내려고 노력 중이며 많은 답변을 찾았습니다.
많은 질문과 답변을 찾았지만 일부 솔루션을 제공하더라도 대부분의 설명은 나와 같은 초보자에게는 충분하지 않았습니다. 그래서 내 특별한 경우에는 작동하지 않습니다.
누군가 이것이 작동하지 않는 이유를 이해하도록 도와줄 수 있습니까?
$> XSOCK=/tmp/.X11-unix
$> XAUTH=/tmp/.docker.xauth
$> xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
$> sudo docker run --name my_name \
-v $XSOCK:$XSOCK \
-v $XAUTH:$XAUTH \
-e DISPLAY=$DISPLAY \
-e XAUTHORITY=$XAUTH \
-it b9d09a81e708
다음을 사용하여 그래프를 만들려고 할 때 발생하는 오류는 다음과 같습니다 matplotlib
.
In [1]: import matplotlib.pyplot as plt
In [2]: plt.figure()
--------------------------------------------------------------------
TclError Traceback (most recent call last)
...
TclError: couldn't connect to display "localhost:10.0"
다음은 이 일련의 명령에 대한 현재 이해입니다.
XSOCK
로컬 시스템의 소켓에 대한 경로를 포함하는 새 변수를 생성하고 플래그를 사용하여 마운트하여 로컬 시스템의 기존 X11 소켓을 docker 컨테이너의 소켓에 연결합니다-v
.소켓 경로가 포함된 로컬 시스템에 새 변수를 생성하고 이를 플래그로 마운트하여 새 소켓을 생성합니다
/tmp/.docker.xauth
(해당 파일은 현재 존재하지 않습니다).XAUTH
-v
사용
xauth
명령은 로컬 시스템의 현재 디스플레이를 숫자 형식으로 나열하고sed
명령을 사용하여 이를 변경한 다음 방금 만든 새 소켓 파일에 다시 추가합니다.Docker 이미지를 실행하고 및 값을
DISPLAY
사용하여 로컬 시스템에 새 변수 sum을 만듭니다 .XAUTHORITY
DISPLAY
XAUTH
아직 알 수 없는 내용은 다음과 같습니다.
새로 생성된 소켓의 용도는 무엇입니까
/tmp/.docker.xauth
?이 명령은 무엇을 합니까
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
? 특히:ㅏ. 이 섹션
sed
의 목적은 무엇입니까 ? 의 출력을 의xauth nlist $DISPLAY
입력으로 어떻게 변경합니까xauth -f $XAUTH nmerge -
?b
-
의 끝은 무엇입니까xauth -f $XAUTH nmerge -
?Dockerfile에 연결할 때 오버헤드가 모두 발생하지 않도록 이러한 명령 중 하나를 Dockerfile 내에서 직접 수행할 수 있습니까?
감사해요