# syntax=docker/dockerfile:experimental ARG BASE=debian:12 FROM $BASE RUN apt-get update \ && apt-get install -y \ curl \ dumb-init \ git \ build-essential \ cmake \ pkg-config \ python3 \ python3-pip \ python3-venv \ nodejs \ npm \ unzip \ zip \ jq \ iputils-ping \ openjdk-17-jdk \ maven \ git-lfs \ locales \ lsb-release \ nano \ openssh-client \ procps \ sudo \ vim-tiny \ wget \ zsh \ && git lfs install \ && rm -rf /var/lib/apt/lists/* # https://wiki.debian.org/Locale#Manually RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen \ && locale-gen ENV LANG=en_US.UTF-8 RUN if grep -q 1000 /etc/passwd; then \ userdel -r "$(id -un 1000)"; \ fi \ && adduser --gecos '' --disabled-password coder \ && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd # Install Oh My Zsh for coder user RUN su - coder -c "curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh" \ && su - coder -c "git clone https://github.com/zsh-users/zsh-autosuggestions /home/coder/.oh-my-zsh/custom/plugins/zsh-autosuggestions" \ && su - coder -c "git clone https://github.com/zsh-users/zsh-syntax-highlighting.git /home/coder/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \ && su - coder -c "sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/g' /home/coder/.zshrc" \ && chown -R coder:coder /home/coder/.oh-my-zsh \ && chown coder:coder /home/coder/.zshrc \ && chsh -s /usr/bin/zsh coder RUN ARCH="$(dpkg --print-architecture)" \ && curl -fsSL "https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-$ARCH.tar.gz" | tar -C /usr/local/bin -xzf - \ && chown root:root /usr/local/bin/fixuid \ && chmod 4755 /usr/local/bin/fixuid \ && mkdir -p /etc/fixuid \ && printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml COPY entrypoint.sh /usr/bin/entrypoint.sh RUN chmod +x /usr/bin/entrypoint.sh # Add new startup script COPY start.sh /start.sh RUN chmod +x /start.sh # Install code-server using the installation script RUN curl -fsSL https://code-server.dev/install.sh | sh # Allow users to have scripts run on container startup to prepare workspace. # https://github.com/coder/code-server/issues/5177 ENV ENTRYPOINTD=${HOME}/entrypoint.d # Set default timezone to UTC, can be overridden by TZ environment variable ENV TZ=UTC RUN apt-get update && apt-get install -y tzdata \ && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \ && echo ${TZ} > /etc/timezone \ && dpkg-reconfigure -f noninteractive tzdata \ && rm -rf /var/lib/apt/lists/* EXPOSE 7860 # This way, if someone sets $DOCKER_USER, docker-exec will still work as # the uid will remain the same. note: only relevant if -u isn't passed to # docker-run. USER 1000 ENV USER=coder ENV SHELL=/usr/bin/zsh WORKDIR /home/coder/workspace ENTRYPOINT ["/start.sh"]