我试图避免在运行 Ubuntu 16.04 的笔记本电脑上安装另一个软件(Blender)的大量依赖项。因此,我决定构建一个具有这些依赖项的 Singularity 容器,以便我可以通过该容器编译 Blender。所以我的目标是在容器中也有 VS Code,以可视化方式运行它,在本地机器上编译 Blender 并进行调试/代码编辑等。以下是我如何构建安装了 VS Code 的容器:
BootStrap: docker
From: nvidia/cuda:9.0-devel-ubuntu16.04
%post
apt-get -y update && apt-get -y install locales
locale-gen en_US.UTF-8
apt-get -y update && apt-get -y install make \
dpkg \
wget \
bzip2 \
libglib2.0-0 \
libxext6 \
libsm6 \
libxrender1 \
g++ \
gcc \
xvfb \
libyaml-cpp-dev \
git \
cmake \
vim \
curl \
ca-certificates \
software-properties-common \
python3 \
python3-pip \
gdb \
libopenexr-dev \
zlib1g-dev \
xserver-xorg \
freeglut3-dev \
mesa-utils \
libreadline-dev \
gnuplot \
gnuplot-qt \
unzip \
libboost-all-dev \
libnss3 \
libgconf-2-4 \
libasound2 \
libsecret-1-0 \
libnss3 \
libgconf-2-4 \
libasound2 \
libatk-adaptor \
libgail-common \
libcanberra-gtk-module \
gtk2-engines \
gtk2-engines-*
apt-get -y install --reinstall overlay-scrollbar-gtk2 \
gtk2-engines-murrine
# Install Visual Studio Code and relevant extensions
cd /
mkdir vscode && cd vscode && wget -O code_amd64 https://go.microsoft.com/fwlink/?LinkID=760868
dpkg -i code_amd64
code --install-extension ms-vscode.cpptools --user-data-dir='/vscode/'
code --install-extension vector-of-bool.cmake-tools --user-data-dir='/vscode/'
code --install-extension ms-python.python --user-data-dir='/vscode/'
rm code_amd64
构建容器后,我使用--nv
标志将其插入其中。但是,这样做code . -s
不会显示 Visual Studio Code GUI,并显示一堆错误,例如Gtk-Message: Failed to load module "unity-gtk-module"
、bus.cc(427)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
和dconf-CRITICAL **: unable to create directory '/run/user/1000/dconf': Permission denied. dconf will not work properly.
。需要提到的是,执行glxgears
工作按预期进行并显示齿轮正在运行。
sudo
如果我使用(我几乎应该总是避免)进入我的奇点容器并运行code -s --user-data-dir=''
,我只会得到ERROR:browser_main_loop.cc(279)] Gtk: cannot open display: :0
错误,其他警告/错误消失。glxgrears
也显示了类似的错误:Error: couldn't open display :0
尽管事实是在将外壳打入容器时echo $DISPLAY
显示:0
和和没有 sudo
。
所以我想知道,如何使用 Docker 或 Singularity 正确运行带有 GUI 的 VS Code?在互联网上进行一些搜索后,我确信我正在安装所有必要的模块,以便能够在 Singularity 中运行带有 GUI 的应用程序,但为什么 VS Code 没有发生这种情况?任何人都可以给我一些关于正在发生的事情的线索和/或提供关于如何在使用 Singularity 容器时运行 GUI 的解决方案。
答案1
我遇到了一些相同的问题,似乎 vscode/ Electron 中只有很多“东西”假设 udev/dbus 和 /run/user... 的访问权限可用。
我通过使用绑定命令解决了这个问题;如果这是愚蠢或危险的,请大喊,但这是我目前启动 vscode 的方式:
singularity run --nv -B /run/user/$(id -u):/run/user/$(id -u) vscode.simg