docker container에서 GUI 애플리케이션을 수행할 필요가 있는 경우가 많다.

이를테면 vscode를 실행시킨다던지, 심심하니까 xeyes를 실행시켜 놓는다던지..

아래 설명한 방법을 사용하면 docker container가 무엇이든 X windows와 연동하여 GUI 애플리케이션 수행이 가능하다.

참고로 여기서는 테스트를 위해서 ubuntu를 container로 설치하여 설명한다.

( 참고로 저의 경우 tensorflow와 pytorch docker container에서 vscode를 주로 호출해서 사용합니다.

  OS로 사용하는 ubuntu에 기본 외에 다른 것을 설치하기를 싫어하기 때문이며

  개발환경은 가급적 docker 내에 구성하려고 애쓰는 편입니다. )

 

□ docker container에서 GUI 환경 사용

docker 환경에서 GUI application을 사용하는 것을 테스트 하기 위해 ubuntu 환경을 설치한다.

$ docker pull ubuntu


docker container를 X windows와 연동할 수 있도록 옵션을 붙여서 수행한다.

$ docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --name ubuntu1 ubuntu

 

위에서 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY 옵션은 핵심이다.

또한 --name ubuntu1에서 ubuntu1은 작성 예일 뿐이며 당연히 사용자가 원하는 이름으로 정하면 된다.

 

참고로 exit로 빠져나왔을 경우

$ docker start utuntu1

$ docker attach ubuntu1

 

□ 연동 확인 테스트

docker의 ubuntu1 컨테이너를 실행시킨 후 

X windows 연동 테스트를 위해서 xeyes를 사용하고 xeyes 설치를 위해 x11-apps를 설치한다.

$ apt-get update

$ apt-get install x11-apps

 

xeyes를 실행하면 보통은 아래처럼 오류가 나온다.

$ xeyes

No protocol specified
Error: Can't open display: :1

docker container가 아닌 외부에서 다른 터미널을 하나 띄우고 아래와 같이 수행한다.

docker user가 실행하는 모든 프로그램을 X windows와 통신하게 해준다.

$ xhost +local:docker

 

해제하려면 다음과 같이 수행한다.

$ xhost -local:docker

 

docker user 외에도 아래처럼 X windows를 로그인한 user로 설정해도 된다.
xhost +local:$USER
xhost -local:$USER

반응형

+ Recent posts