#FROM ubuntu:18.04 #FROM nvidia/opengl:1.2-glvnd-runtime-ubuntu18.04 FROM nvidia/vulkan:1.1.121-cuda-10.1--ubuntu18.04 LABEL maintainer="ikko@hosei.ac.jp" RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; ARG CARLA_VERSION_FULL=0.9.10.1 ARG CARLA_VERSION=0.9.10 ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_DRIVER_CAPABILITIES=compute,graphics,display ENV DEBIAN_FRONTEND noninteractive # add new sudo user ENV USERNAME kbkn ENV HOME /home/$USERNAME RUN useradd -m $USERNAME && \ echo "$USERNAME:$USERNAME" | chpasswd && \ usermod --shell /bin/bash $USERNAME && \ usermod -aG sudo $USERNAME && \ mkdir /etc/sudoers.d && \ echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME && \ chmod 0440 /etc/sudoers.d/$USERNAME && \ # Replace 1000 with your user/group id usermod --uid 1000 $USERNAME && \ groupmod --gid 1000 $USERNAME && \ mkdir -p /home/$USERNAME/.cache && \ mkdir -p /home/$USERNAME/.config && \ mkdir -p /home/$USERNAME/.cache && \ chown -Rf $USERNAME.$USERNAME /home/$USERNAME RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ less \ tmux \ bash-completion \ command-not-found \ software-properties-common \ xsel \ xdg-user-dirs \ python \ python-pip \ python-dev \ python-protobuf \ python-pexpect \ pcl-tools \ openssh-server \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN packages='libsdl2-2.0 xserver-xorg libvulkan1' \ && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $packages --no-install-recommends \ && VULKAN_API_VERSION=`dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9|\.]+'` && \ mkdir -p /etc/vulkan/icd.d/ && \ echo \ "{\ \"file_format_version\" : \"1.0.0\",\ \"ICD\": {\ \"library_path\": \"libGLX_nvidia.so.0\",\ \"api_version\" : \"${VULKAN_API_VERSION}\"\ }\ }" > /etc/vulkan/icd.d/nvidia_icd.json \ && rm -rf /var/lib/apt/lists/* # Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Failed to execute child process dbus-launch (No such file or directory) # fix by setting LANG https://askubuntu.com/questions/608330/problem-with-gnome-terminal-on-gnome-3-12-2 # to install locales https://stackoverflow.com/questions/39760663/docker-ubuntu-bin-sh-1-locale-gen-not-found RUN apt-get clean && \ apt-get update && \ apt-get install -y locales && \ rm -rf /var/lib/apt/lists/* && \ locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 # (1) Install Xorg and NVIDIA driver inside the container # Almost same procesure as nvidia/driver https://gitlab.com/nvidia/driver/blob/master/ubuntu16.04/Dockerfile # (1-1) Install prerequisites RUN dpkg --add-architecture i386 && \ apt-get update && apt-get install -y --no-install-recommends \ apt-utils \ build-essential \ ca-certificates \ curl \ wget \ vim \ zip \ unzip \ git \ kmod \ libc6:i386 \ pkg-config \ libelf-dev && \ rm -rf /var/lib/apt/lists/* # (1-2) Install xorg server and xinit BEFORE INSTALLING NVIDIA DRIVER. # After this installation, command Xorg and xinit can be used in the container # if you need full ubuntu desktop environment, the line below should be added. # ubuntu-desktop \ RUN apt-get update && apt-get install -y \ xinit && \ rm -rf /var/lib/apt/lists/* COPY cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb /tmp/cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb RUN cd /tmp && \ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin && \ mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 && \ dpkg -i cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb && \ apt-key add /var/cuda-repo-ubuntu1804-11-2-local/7fa2af80.pub && \ apt-get update && apt-get install -y --no-install-recommends \ cuda-drivers && \ rm -rf cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb && \ rm -rf /var/lib/apt/lists/* # (2) Configurate Xorg # (2-1) Install some necessary softwares # # pkg-config: nvidia-xconfig requires this package # mesa-utils: This package includes glxgears and glxinfo, which is useful for testing GLX drivers # x11vnc: Make connection between x11 server and VNC client. # x11-apps: xeyes can be used to make sure that X11 server is running. # # Note: x11vnc in ubuntu18.04 is useless beacuse of stack smashing bug. See below to manual compilation. RUN apt-get update && apt-get install -y --no-install-recommends \ mesa-utils \ x11-apps && \ rm -rf /var/lib/apt/lists/* # solution for the `stack smashing detected` issue # https://github.com/LibVNC/x11vnc/issues/61 RUN apt-get update && apt-get install -y --no-install-recommends \ automake autoconf libssl-dev xorg-dev libvncserver-dev xdg-user-dirs xdg-utils && \ rm -rf /var/lib/apt/lists/* && \ git clone https://github.com/LibVNC/x11vnc.git && \ cd x11vnc && \ ./autogen.sh && \ make && \ cp src/x11vnc /usr/bin/x11vnc # (2-2) Optional vulkan support # vulkan-utils includes vulkan-smoketest, benchmark software of vulkan API RUN apt-get update && apt-get install -y --no-install-recommends \ vulkan-utils && \ rm -rf /var/lib/apt/lists/* # for test RUN apt-get update && apt-get install -y --no-install-recommends \ firefox openbox menu && \ rm -rf /var/lib/apt/lists/* # sound driver and GTK library # If you want to use sounds on docker, try `pulseaudio --start` RUN apt-get update && apt-get install -y --no-install-recommends \ alsa pulseaudio libgtk2.0-0 && \ rm -rf /var/lib/apt/lists/* # novnc # download websockify as well RUN wget https://github.com/novnc/noVNC/archive/v1.2.0.zip && \ unzip -q v1.2.0.zip && \ rm -rf v1.2.0.zip && \ git clone https://github.com/novnc/websockify /noVNC-1.2.0/utils/websockify # Xorg segfault error # dbus-core: error connecting to system bus: org.freedesktop.DBus.Error.FileNotFound (Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory) # related? https://github.com/Microsoft/WSL/issues/2016 RUN apt-get update && apt-get install -y --no-install-recommends \ dbus-x11 \ libdbus-c++-1-0v5 && \ rm -rf /var/lib/apt/lists/* RUN echo "alias m='cd /home/$USERNAME ; su $USERNAME'" >> /home/$USERNAME/.bashrc # ROS Melodic RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 RUN apt-get update && apt-get install -y --no-install-recommends \ ros-melodic-desktop-full \ python-rosdep \ python-rosinstall \ python-rosinstall-generator \ python-wstool \ build-essential \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # addtional ROS package RUN apt-get update && apt-get install -y --no-install-recommends \ ros-melodic-derived-object-msgs \ ros-melodic-ackermann-msgs \ ros-melodic-ainstein-radar-msgs \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN pip install --upgrade setuptools wheel && \ pip install \ simple-pid \ numpy \ pygame \ transforms3d \ future \ matplotlib \ open3d \ pyrsistent==0.16.1 \ psutil \ py-cpuinfo \ python-tr \ xmlschema==1.0.18 \ py-trees==0.8.3 \ Shapely \ mkdocs \ markdown-include \ mkdocs-redirects \ networkx \ decorator==5.0.0 && \ rosdep init USER $USERNAME WORKDIR /home/$USERNAME RUN rosdep update COPY CARLA_${CARLA_VERSION_FULL}.tar.gz /home/$USERNAME/ RUN mkdir CARLA_${CARLA_VERSION_FULL} && \ tar xfvz CARLA_${CARLA_VERSION_FULL}.tar.gz -C CARLA_${CARLA_VERSION_FULL} && \ rm /home/$USERNAME/CARLA_${CARLA_VERSION_FULL}.tar.gz COPY AdditionalMaps_${CARLA_VERSION_FULL}.tar.gz /home/$USERNAME/ RUN tar xfvz AdditionalMaps_${CARLA_VERSION_FULL}.tar.gz -C /home/$USERNAME/CARLA_${CARLA_VERSION_FULL}/ && \ rm /home/$USERNAME/AdditionalMaps_${CARLA_VERSION_FULL}.tar.gz RUN echo "export PYTHONPATH=$PYTHONPATH:~/CARLA_${CARLA_VERSION_FULL}/PythonAPI/carla/dist/carla-${CARLA_VERSION}-py2.7-linux-x86_64.egg:~/CARLA_${CARLA_VERSION_FULL}/PythonAPI/carla" >> ~/.bashrc SHELL ["/bin/bash", "-c"] RUN mkdir -p ~/catkin_ws/src && \ source /opt/ros/melodic/setup.bash && \ catkin_init_workspace ~/catkin_ws/src && \ cd ~/catkin_ws/src && \ git clone --recursive https://github.com/carla-simulator/ros-bridge.git -b ${CARLA_VERSION_FULL} && \ cd ~/catkin_ws && \ catkin_make -DCMAKE_BUILD_TYPE=Release && \ source ~/catkin_ws/devel/setup.bash RUN cd /home/$USERNAME && \ git clone https://github.com/carla-simulator/scenario_runner.git -b v${CARLA_VERSION} RUN echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc && \ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc && \ echo "alias cm='cd ~/catkin_ws;catkin_make'" >> ~/.bashrc && \ echo "alias cs='cd ~/catkin_ws/src'" >> ~/.bashrc && \ echo "export SCENARIO_RUNNER_PATH=/home/$USERNAME/scenario_runner" >> ~/.bashrc USER root WORKDIR /root RUN echo "alias m='cd /home/$USERNAME ; su $USERNAME'" >> /root/.bashrc COPY startup.sh /startup.sh COPY scripts/ /home/$USERNAME/scripts/ EXPOSE 5900 EXPOSE 8081 CMD ["bash", "/startup.sh"]