Docker 컨테이너의 GUI를 Mac 쪽으로 건너뛰어 표시합니다.
오랜만에 docker 용기 안에서 Selenium의 실행 화면이 맥 옆의 X로 날아갈 수 있을지 모르겠습니다.
시간이 많은 문제를 해결한 것 같아서 이런 방법의 비결이 여기저기 떨어졌다.
당신은 실제로 무엇을 하고 있습니까?
실제로 무엇을 하고 있는지 잘 모르기 때문에 공부도 함께 쓴다.
절차는 다음과 같다.
brew install socat
brew install caskroom/cask/brew-cask
brew cask install xquartz
open -a XQuartz
# socatを起動すると、そのまま待ち状態になるので、別ターミナルへ
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
# 別ターミナルから、docker run実施。この時に、環境変数DISPLAYを指定。
docker run -e DISPLAY=192.168.99.1:0 <GUIの入ったイメージ> <実行したいコマンド>
상기 주의점은 -e DISPLAY=xxx에서 docker가 네트워크로 보는 Mac 측의 IP 주소를 지정하는 것입니다.ifconfig는 얻을 수 있기 때문에 이 예에서 192.168.99.1이다.
% ifconfig
.....
vboxnet3: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ether 0a:00:27:00:00:03
inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
얼른 일어나보세요!
그럼 바로 실행합시다.
며칠 전 만들어진 일본어 글씨체 입력이 인상적이어서 거기서 GUI 애플리케이션을 적절히 선택했다.(이번에는xbsh
% docker run -it -e DISPLAY=192.168.99.1:0 --rm takano/protractor-webdriver-ja:1.0 xbsh
잠시 후, Mac 측의 XQuartz가 시작되었고, xbsh 창이 표시됩니다.아이구!라는 느낌을 받았다.
지난번에 쓴 두건의 프로트랙터 테스트도 xvfb 부분도 없이 프로트랙터로...명령을 내리면 크롬은 테스트를 수행하기 위해 Mac로 날아갈 것이다.
좀 더 자세히
이상, 하고 싶은 일은 여기서 마치겠습니다.
모처럼의 기회인 만큼 무엇을 진행 중인지 다시 한번 확인해 보겠습니다.
우선, socat은 일반적인 서버 간 통신 (포트 이용) 을 플러그인으로 변환할 수 있는 도구입니다.(맞아요. 잘 모르겠어요.)
이걸로 docker 용기에서 docker 호스트를 통해 Mac port: 6000에 대한 요청을 Mac의 X용 플러그에 전달합니다.
(exp. DISPLAY=/private/tmp/com.apple.launchd.GLgekQSd9H/org.macosforge.xquartz:0)
Mac에서 tcpdump까지 위의 화면처럼 GUI 응용 프로그램이 시작될 때port6000에서 docker 호스트를 통해 docker 용기에서 시작하는 그림 그리기 통신이 발생합니다.
제대로 작동하지 않을 때?
이 방법을 사용하면 Mac 포트 6000에 대한 입국 통신이 발생합니다.
docker 컨테이너에서 GUI 애플리케이션을 시작하면 Mac 측면의 화면도 그려지지 않고 방화벽에 가려질 수 있습니다.
바이러스 대책 소프트웨어와 보안 소프트웨어의 설정을 확인하세요.
사실 저는 이렇습니다. "어?"이런 상황이 됐어요.
Reference
이 문제에 관하여(Docker 컨테이너의 GUI를 Mac 쪽으로 건너뛰어 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akiko-pusu/items/e42aab2df1a5772f9585텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)