Try   HackMD
tags: tutorials docker ubuntu linux cuda GPU NVIDIA python deep learning AI

Docker 中使用 GUI

  1. run container 時加入 DISPLAYXAUTHORITY 環境變數,設定 net 參數,將 x server 相關檔案掛載進 container

    ​​​​docker run -it -h $(hostname) -e DISPLAY=$DISPLAY -e XAUTHORITY=/tmp/xauth -v ~/.Xauthority:/tmp/xauth -v /tmp/.X11-unix:/tmp/.X11-unix --net=host -d {imageID_or_repo:Tag}
    • -h: 將 container 的 host 設為和 local 相同 (因為 ~/.Xauthority 會和主機名稱綁在一起)
    • -e: 設定 container 環境變數指令
      • DISPLAY=$DISPLAY: 將 container 內部的 DISPLAY 參數使用的顯示 port 設成和外部使用者同一個
      • XAUTHORITY=/tmp/xauth: 將 container 內部 X server 授權文件的 XAUTHORITY 參數設成和外部使用者同一個顯示授權文件
    • -v: 外部授權相關文件掛載進 container
      • ~/.Xauthority 掛載進 container 的 /tmp/xauth
      • /tmp/.X11-unix 掛載進 container 的 /tmp/.X11-unix
    • --net: 設定 container 連線方式,
      • host: 和主機使用相同連線方式
  2. 進入 container 後,使用 su {user_name} 切換為外部使用者 (會在 container 內開啟新 shell)

    如果一開始 container 沒有外部使用者,則需要照 container 外面(local)的 $USER 跟 $UID, 在 docker 裡面也建立一個同名同代號的 user: useradd -m -s /bin/bash -u {$UID} {$USER}