docker 啟動GUI程式
安裝docker,並設定映象加速器
curl -sSL https://get.daocloud.io/docker | sh
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://g5uyhrgn.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
GUI的準備工作
-
在宿主機中下載x11軟體並開放許可權
sudo apt-get install x11-xserver-utils
xhost + #是開放許可權,允許所有使用者,當然包括docker,訪問X11 的顯示介面,正常返回access control disabled, clients can connect from any host
xhost 是用來控制X server訪問許可權的。通常當我們從宿主機登陸到docker上,執行docker上的應用程式時,做為應用程式來說,宿主機是client,但是作為圖形來說,是要在宿主機上顯示的,需要使用宿主機的Xserver,所以宿主機是server。因此在登陸到docker前,需要在宿主機上執行xhost +來使其它使用者能夠訪問宿主機的Xserver。xhost + 是使所有使用者都能訪問宿主機的Xserver.xhost + ip使ip上的使用者能夠訪問宿主機的Xserver。
有時在執行xhost會報出以下錯誤
xhost: unable to open display "XXXX"
解決方法:設定DISPLAY變數,DISPLAY用來設定將圖形顯示到何處,DISPLAY 環境變數格式如下hostname: displaynumber.screennumber
,在某些機器上,可能有多個顯示裝置共享使用同一套輸入裝置,例如在一臺PC上連線兩臺CRT顯示器,但是它們只共享使用一個鍵盤和一個滑鼠。這一組顯示裝置就擁有一個共同的displaynumber,而這組顯示裝置中的每個單獨的裝置則擁有自己單獨的 screennumber。displaynumber和screennumber都是從零開始的數字。這樣,對於我們普通使用者來說, displaynumber、screennumber就都是0。 hostname指Xserver所在的主機主機名或者ip地址, 圖形將顯示在這一機器上。
export DISPLAY=:0.0
xhost +
-
根據dockerfile建立image映象
docker build -f dockerfile -t 映象名 .
-
建立容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -dit -P -e DISPLAY=$DISPLAY --privileged --network=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw -v /dev/bus/usb:/dev/bus/usb -v /home/lfxs/StudioData:/StudioData --name gui01 mydb:0.1 /bin/bash #-d: 後臺執行容器,並返回容器ID #-i: 以互動模式執行容器,通常與 -t 同時使用; #-P: 隨機埠對映,容器內部埠隨機對映到主機的埠 #-p: 指定埠對映,格式為:主機(宿主)埠:容器埠 #-e:設定環境變數 #--privileged 是否允許Docker執行的容器擁有root許可權 #--network指定容器的網路連線型別,支援 bridge/host/none/container: 四種類型;常用bridge和host #-v:繫結一個卷 #--name :容器名
通過ssh 連線docker,並執行GUI程式
命令:
ssh -Y 使用者名稱@容器名 -p port
說明:在/etc/hosts 中指定ip和容器的對應關係,新增192.168.2.68 gui01
,由於network設定為hosts模式,容器和宿主機共用一個network namespaces,使用宿主機的IP和port。
然後通過命令/etc/init.d/ssh status
檢視宿主機和容器中ssh是否是開啟的,如果沒有開啟使用命令
systemctl restart sshd.service
開啟/etc/ssh/sshd_config,新增埠號
port=10002
重啟ssh服務
/etc/init.d/ssh restart
還有以下幾種方式登入docker
ssh -Y -l 使用者名稱 ip -p port
ssh -Y 使用者名稱@ip -p port
測試docker中GUI在宿主機上顯示,在docker中下載xarclock
sudo apt-get install xarclock
xarclock
遇到的問題
- 建立容器時如果設定network為host模式時,要指定在容器中執行/bin/bash。如果不指定,可能會出現容器啟動不了的問題。
- 修改lightmd.conf導致圖形介面崩潰。
https://blog.csdn.net/u012570215/article/details/102946670