Docker 컨테이너에서 Python 그리기를 위한 Xauthority

Docker 컨테이너에서 Python 그리기를 위한 Xauthority

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"

다음은 이 일련의 명령에 대한 현재 이해입니다.

  1. XSOCK로컬 시스템의 소켓에 대한 경로를 포함하는 새 변수를 생성하고 플래그를 사용하여 마운트하여 로컬 시스템의 기존 X11 소켓을 docker 컨테이너의 소켓에 연결합니다 -v.

  2. 소켓 경로가 포함된 로컬 시스템에 새 변수를 생성하고 이를 플래그로 마운트하여 새 소켓을 생성합니다 /tmp/.docker.xauth(해당 파일은 현재 존재하지 않습니다).XAUTH-v

  3. 사용xauth명령은 로컬 시스템의 현재 디스플레이를 숫자 형식으로 나열하고 sed명령을 사용하여 이를 변경한 다음 방금 만든 새 소켓 파일에 다시 추가합니다.

  4. Docker 이미지를 실행하고 및 값을 DISPLAY사용하여 로컬 시스템에 새 변수 sum을 만듭니다 .XAUTHORITYDISPLAYXAUTH

아직 알 수 없는 내용은 다음과 같습니다.

  1. 새로 생성된 소켓의 용도는 무엇입니까 /tmp/.docker.xauth?

  2. 이 명령은 무엇을 합니까 xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -? 특히:

    ㅏ. 이 섹션 sed의 목적은 무엇입니까 ? 의 출력을 의 xauth nlist $DISPLAY입력으로 어떻게 변경합니까 xauth -f $XAUTH nmerge -?

    b -의 끝은 무엇입니까 xauth -f $XAUTH nmerge -?

  3. Dockerfile에 연결할 때 오버헤드가 모두 발생하지 않도록 이러한 명령 중 하나를 Dockerfile 내에서 직접 수행할 수 있습니까?

감사해요

관련 정보