## Dockerfile cat >Dockerfile <<- 'Dockerfile' # syntax = docker/dockerfile:1.2 FROM quay.io/archlinux/archlinux:base-devel USER root # Docker ENV variables # # Required # ENV MYVNC_VNCPASS # # Optional # ENV MYVNC_CUSTOM_TITLE # ENV MYVNC_PROXYPATH (eg, "/subpath/" or "/subpath") # ENV MYVNC_VNCSHARING (eg, "true" to allow sharing (defaults to "false")) # ENV MYVNC_VNCSERVER_HOST (eg, localhost or 192.168.1.1) # ENV MYVNC_VNCSERVER_PORT (eg, 5900) # Build ARG for additional pacman packages to install (eg, openssh) ARG pkg # Install packages COPY mirrorlist /etc/pacman.d/mirrorlist RUN pacman-key --init \ && sed -i '/ParallelDownloads/c ParallelDownloads = 10' /etc/pacman.conf \ && pacman -Sy --ask 4 archlinux-keyring \ && pacman -Su --ask 4 --needed \ sudo ${pkg} \ inetutils python-numpy python-setuptools \ nginx-mainline \ && pacman -Scc --ask 4 \ && useradd --create-home --gid users --shell /usr/bin/bash user \ && echo 'user ALL=(ALL:ALL) NOPASSWD: MISCELLANEOUS, /usr/bin/nginx' >/etc/sudoers.d/zz-DOCKER \ && echo 'Defaults lecture = never' >>/etc/sudoers.d/zz-DOCKER \ && passwd -l root >/dev/null 2>&1 \ && sed '/^http {/a\ \ include /app/nginx/\*.conf;\n\ \ types_hash_max_size 4096;\n\ \ server_names_hash_bucket_size 128;\n' -i /etc/nginx/nginx.conf \ && mkdir -p /app/init.d /app/nginx /app/logs # Install noVNC COPY novnc /app/novnc # Install all init scripts COPY docker-entrypoint.sh /docker-entrypoint.sh COPY 01-init.sh 10-novnc.sh 10-nginx.sh /app/init.d/ # Proper permissions RUN chmod +x /docker-entrypoint.sh /app/init.d/* \ && chown -R user:users /app # Default environment USER user WORKDIR /home/user ENV DISPLAY :0 ENV SHELL /usr/bin/bash # Expose nginx port for VNC webui EXPOSE 6900 # Docker entrypoint ENTRYPOINT ["/docker-entrypoint.sh"] Dockerfile ## Init script, always runs first cat >01-init.sh <<- '01-init.sh' #!/usr/bin/env bash # Create base directories for dir in vnc config ssh do [ -d ~/.${dir} ] || mkdir -p ~/.${dir} done ## OPTIONAL: More commands may be added below 01-init.sh ## NoVNC setup cat >10-novnc.sh <<- '10-novnc.sh' #!/usr/bin/env bash # Turn vnc sharing on/off if [[ ${MYVNC_VNCSHARING} == "true" ]] || [[ ${MYVNC_VNCSHARING} == "1" ]] then _MYVNC_VNCSHARING=true else _MYVNC_VNCSHARING=false fi # Always default to remote scaling sed -i "/UI.initSetting\|resize/ s/resize', '.*');/resize', 'scale');/" /app/novnc/app/ui.js # Always default to autoconnect=true sed -i "/let autoconnect/ s/autoconnect', .*);/autoconnect', true);/" /app/novnc/app/ui.js # Change vnc shared view settings (defaults to false/off) sed -i "/UI.initSetting\|shared/ s/shared', .*);/shared', ${_MYVNC_VNCSHARING});/" /app/novnc/app/ui.js # NoVNC custom title sed -i "/