mirror of
https://github.com/aleleba/aleleba-vscode-dockerfile-configuration.git
synced 2026-09-08 11:50:01 -06:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11ae12a0b7
|
||
|
|
156d32ea9d
|
||
|
|
ac0914a08b
|
||
|
|
47b624b708
|
||
|
|
6682a59f53
|
||
|
|
3b1a175eac
|
||
|
|
69e52bcac1
|
||
|
|
9a998f3e0c
|
||
|
|
48ca077a44
|
||
|
|
6186b16503
|
||
|
|
6131b86b48
|
||
|
|
8080ba8110
|
||
|
|
cfe27a3e86
|
||
|
|
bfeb1e8a08
|
||
|
|
0ecbe1c0ad
|
||
|
|
085c5db158
|
||
|
|
b6603398e2
|
||
|
|
7076f09b06
|
||
|
|
dc46ee00a3
|
||
|
|
fba2d768e9
|
||
|
|
40c5f1c963
|
||
|
|
e34b39c827
|
||
|
|
f3797b5660
|
||
|
|
a1e53a6624
|
||
|
|
3da90aa1a4
|
||
|
|
aa9afba282
|
||
|
|
0fe46e635d
|
||
|
|
d84caeb8cf
|
@@ -2,11 +2,8 @@
|
|||||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
||||||
# for examples
|
# for examples
|
||||||
|
|
||||||
# If not running interactively, don't do anything
|
# If not running interactively, don't do anything below
|
||||||
case $- in
|
if [[ $- == *i* ]]; then
|
||||||
*i*) ;;
|
|
||||||
*) return;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# don't put duplicate lines or lines starting with space in the history.
|
# don't put duplicate lines or lines starting with space in the history.
|
||||||
# See bash(1) for more options
|
# See bash(1) for more options
|
||||||
@@ -115,4 +112,6 @@ if ! shopt -oq posix; then
|
|||||||
. /etc/bash_completion
|
. /etc/bash_completion
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
|
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
|
||||||
@@ -8,23 +8,46 @@ jobs:
|
|||||||
docker:
|
docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Checkout
|
||||||
name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
-
|
|
||||||
name: Set up Docker Buildx
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v1
|
||||||
-
|
|
||||||
name: Login to DockerHub
|
# 🔑 Login to DockerHub
|
||||||
|
- name: Login to DockerHub
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v1
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
-
|
|
||||||
name: Build and push
|
# 🔑 Login to Gitea Registry
|
||||||
|
- name: Login to Gitea Registry
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
registry: gitea.p-lao.com
|
||||||
|
username: aleleba
|
||||||
|
password: ${{ secrets.GITEA_API_TOKEN }}
|
||||||
|
|
||||||
|
# 🚀 Build and push to BOTH registries
|
||||||
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v2
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
tags: aleleba/vscode:latest
|
platforms: linux/amd64,linux/arm64
|
||||||
platforms: linux/amd64,linux/arm64
|
tags: |
|
||||||
|
aleleba/vscode:latest
|
||||||
|
gitea.p-lao.com/aleleba/vscode:latest
|
||||||
|
|
||||||
|
- name: Trigger workflow in Gitea
|
||||||
|
if: success()
|
||||||
|
run: |
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token ${{ secrets.GITEA_API_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
https://gitea.p-lao.com/api/v1/repos/aleleba/vscode-server/actions/workflows/main-workflow.yml/dispatches \
|
||||||
|
-d '{"ref":"master","inputs":{"image":"gitea.p-lao.com/aleleba/vscode-server:latest"}}'
|
||||||
|
|||||||
+9
-6
@@ -29,13 +29,16 @@ RUN curl -sL https://aka.ms/DevTunnelCliInstall | bash
|
|||||||
|
|
||||||
#Instalando VSCode
|
#Instalando VSCode
|
||||||
RUN ARCH="$(dpkg --print-architecture)" \
|
RUN ARCH="$(dpkg --print-architecture)" \
|
||||||
|
&& case "${ARCH}" in \
|
||||||
|
amd64) VSCODE_ARCH="x64" ;; \
|
||||||
|
arm64) VSCODE_ARCH="arm64" ;; \
|
||||||
|
*) echo "Unsupported architecture: ${ARCH}" >&2; exit 1 ;; \
|
||||||
|
esac \
|
||||||
|
&& curl -fsSL "https://update.code.visualstudio.com/latest/linux-deb-${VSCODE_ARCH}/stable" -o /tmp/vscode.deb \
|
||||||
|
&& (sudo dpkg -i /tmp/vscode.deb || true) \
|
||||||
&& sudo apt-get update \
|
&& sudo apt-get update \
|
||||||
&& sudo apt-get install -y gnupg2 \
|
&& sudo DEBIAN_FRONTEND=noninteractive apt-get install -f -y \
|
||||||
&& sudo apt-get install -y software-properties-common \
|
&& rm -f /tmp/vscode.deb
|
||||||
&& sudo wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - \
|
|
||||||
&& sudo add-apt-repository "deb [arch=${ARCH}] https://packages.microsoft.com/repos/vscode stable main" \
|
|
||||||
&& sudo apt-get update \
|
|
||||||
&& sudo DEBIAN_FRONTEND=noninteractive apt-get install -y code
|
|
||||||
|
|
||||||
#Making home writable
|
#Making home writable
|
||||||
RUN sudo chmod -R a+rwX /home
|
RUN sudo chmod -R a+rwX /home
|
||||||
|
|||||||
+55
-30
@@ -5,6 +5,17 @@ if [[ -z "${HOME_USER-}" ]]; then
|
|||||||
HOME_USER="vscode"
|
HOME_USER="vscode"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Detectar UID/GID del volumen montado en /home/${HOME_USER} (si ya existe),
|
||||||
|
# permitir override explícito vía HOST_UID/HOST_GID, y por defecto usar 1000.
|
||||||
|
DETECTED_UID=$(stat -c '%u' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
|
||||||
|
DETECTED_GID=$(stat -c '%g' "/home/${HOME_USER}" 2>/dev/null || echo 1000)
|
||||||
|
# Descartar UID/GID 0 (root) detectados del mount: es metadata espuria
|
||||||
|
# de bind mounts (p.ej. WSL2/Docker Desktop), no un UID/GID real de host.
|
||||||
|
[ "$DETECTED_UID" = "0" ] && DETECTED_UID=1000
|
||||||
|
[ "$DETECTED_GID" = "0" ] && DETECTED_GID=1000
|
||||||
|
TARGET_UID="${HOST_UID:-$DETECTED_UID}"
|
||||||
|
TARGET_GID="${HOST_GID:-$DETECTED_GID}"
|
||||||
|
|
||||||
if ! grep -q "HOME_USER=" /etc/environment; then
|
if ! grep -q "HOME_USER=" /etc/environment; then
|
||||||
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment"
|
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment"
|
||||||
fi
|
fi
|
||||||
@@ -48,6 +59,13 @@ sed 's/^USER_ENV_//' |
|
|||||||
# Append the result to /usr/bin/.bashrc
|
# Append the result to /usr/bin/.bashrc
|
||||||
while IFS= read -r line
|
while IFS= read -r line
|
||||||
do
|
do
|
||||||
|
# Ensure the user's home directory exists before writing .bashrc
|
||||||
|
if [ ! -d "/home/${HOME_USER}" ]; then
|
||||||
|
sudo mkdir -p "/home/${HOME_USER}"
|
||||||
|
sudo chown root:root "/home/${HOME_USER}"
|
||||||
|
sudo chmod 755 "/home/${HOME_USER}"
|
||||||
|
fi
|
||||||
|
|
||||||
# Check if the current user is root
|
# Check if the current user is root
|
||||||
if [ "$(id -u)" = "0" ]; then
|
if [ "$(id -u)" = "0" ]; then
|
||||||
echo "" >> /usr/bin/.bashrc
|
echo "" >> /usr/bin/.bashrc
|
||||||
@@ -59,8 +77,9 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
USER="$HOME_USER"
|
USER="$HOME_USER"
|
||||||
if ! id -u $HOME_USER > /dev/null 2>&1; then
|
if ! id -u "$HOME_USER" > /dev/null 2>&1; then
|
||||||
sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
|
sudo groupadd -g "${TARGET_GID}" "${HOME_USER}" 2>/dev/null || true
|
||||||
|
sudo adduser --disabled-password --gecos "" --uid "${TARGET_UID}" --gid "${TARGET_GID}" "${HOME_USER}"
|
||||||
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
|
sudo echo "$HOME_USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/nopasswd > /dev/null
|
||||||
|
|
||||||
# Creating .vscode folder if it doesn't exist
|
# Creating .vscode folder if it doesn't exist
|
||||||
@@ -70,13 +89,35 @@ if ! id -u $HOME_USER > /dev/null 2>&1; then
|
|||||||
|
|
||||||
# Changing the property of the directory /home/${HOME_USER}/.vscode
|
# Changing the property of the directory /home/${HOME_USER}/.vscode
|
||||||
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
|
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
|
||||||
|
else
|
||||||
|
# Usuario ya existe (imagen/volumen reusado) — resincronizar UID/GID
|
||||||
|
# SOLO si el operador lo pidió explícitamente vía HOST_UID/HOST_GID.
|
||||||
|
# No usar la detección automática del mount acá: en reinicios repetidos
|
||||||
|
# es una señal poco confiable (ver metadata GID 0 de bind mounts en
|
||||||
|
# WSL2/Docker Desktop) y causaba un groupmod fallido en cada arranque.
|
||||||
|
if [[ -n "${HOST_UID-}" || -n "${HOST_GID-}" ]]; then
|
||||||
|
CURRENT_UID=$(id -u "${HOME_USER}")
|
||||||
|
CURRENT_GID=$(id -g "${HOME_USER}")
|
||||||
|
CURRENT_GROUP=$(id -gn "${HOME_USER}")
|
||||||
|
|
||||||
|
if [ "$CURRENT_UID" != "$TARGET_UID" ] || [ "$CURRENT_GID" != "$TARGET_GID" ]; then
|
||||||
|
if [ "$CURRENT_GID" != "$TARGET_GID" ]; then
|
||||||
|
sudo groupmod -g "${TARGET_GID}" "${CURRENT_GROUP}"
|
||||||
|
fi
|
||||||
|
if [ "$CURRENT_UID" != "$TARGET_UID" ]; then
|
||||||
|
sudo usermod -u "${TARGET_UID}" "${HOME_USER}"
|
||||||
|
fi
|
||||||
|
sudo find / -xdev \( -user "${CURRENT_UID}" -o -group "${CURRENT_GID}" \) \
|
||||||
|
-exec chown -h "${TARGET_UID}:${TARGET_GID}" {} + 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Then execute entrypoint.sh
|
# Then execute entrypoint.sh
|
||||||
if [ "$HOME_USER" != "$(whoami)" ]; then
|
if [ "$HOME_USER" != "$(whoami)" ]; then
|
||||||
exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh"
|
exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh"
|
||||||
else
|
else
|
||||||
sudo chown -R ${HOME_USER} /home/${HOME_USER}
|
sudo find "/home/${HOME_USER}" -xdev -exec chown "${HOME_USER}" {} + 2>/dev/null || true
|
||||||
if [ -d "/home/${HOME_USER}/.ssh" ]; then
|
if [ -d "/home/${HOME_USER}/.ssh" ]; then
|
||||||
sudo chmod 755 /home/${HOME_USER}/.ssh
|
sudo chmod 755 /home/${HOME_USER}/.ssh
|
||||||
sudo chmod -R 600 /home/${HOME_USER}/.ssh/*
|
sudo chmod -R 600 /home/${HOME_USER}/.ssh/*
|
||||||
@@ -111,7 +152,12 @@ fi
|
|||||||
|
|
||||||
# Find .sh files in /usr/bin/custom-scripts and execute them in order
|
# Find .sh files in /usr/bin/custom-scripts and execute them in order
|
||||||
for script in $(find /usr/bin/custom-scripts -name "*.sh" | sort); do
|
for script in $(find /usr/bin/custom-scripts -name "*.sh" | sort); do
|
||||||
chmod +x $script
|
# Ensure the script is executable
|
||||||
|
if [ ! -x $script ]; then
|
||||||
|
sudo chmod +x $script
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute the script as the configured user
|
||||||
if [[ $script == *"sudo"* ]]; then
|
if [[ $script == *"sudo"* ]]; then
|
||||||
sudo -u $HOME_USER bash -c "source /etc/environment; sudo $script"
|
sudo -u $HOME_USER bash -c "source /etc/environment; sudo $script"
|
||||||
else
|
else
|
||||||
@@ -119,6 +165,7 @@ for script in $(find /usr/bin/custom-scripts -name "*.sh" | sort); do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
#Creating extensions folder
|
#Creating extensions folder
|
||||||
if [ ! -d "/home/${HOME_USER}/.config/Code" ]; then
|
if [ ! -d "/home/${HOME_USER}/.config/Code" ]; then
|
||||||
sudo mkdir -p /home/${HOME_USER}/.config/Code
|
sudo mkdir -p /home/${HOME_USER}/.config/Code
|
||||||
@@ -146,7 +193,7 @@ if [ -f "/home/extensions.json" ]; then
|
|||||||
# Loop through the extensions and process each element
|
# Loop through the extensions and process each element
|
||||||
for extension in $extensions; do
|
for extension in $extensions; do
|
||||||
echo "Installing extension: $extension"
|
echo "Installing extension: $extension"
|
||||||
sudo su ${HOME_USER} -c "code --install-extension $extension"
|
sudo su ${HOME_USER} -c "code --install-extension $extension --force"
|
||||||
done
|
done
|
||||||
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server
|
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server
|
||||||
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server-insiders
|
sudo cp -R /home/${HOME_USER}/.vscode/* /home/${HOME_USER}/.vscode-server-insiders
|
||||||
@@ -157,30 +204,8 @@ else
|
|||||||
echo "File extensions.json not found"
|
echo "File extensions.json not found"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if CLI directory exists and has content
|
if [[ -v VSCODE_TUNNEL_NAME && -n "${VSCODE_TUNNEL_NAME}" ]]; then
|
||||||
if [ -d "/home/${HOME_USER}/.vscode/cli" ] && [ "$(ls -A /home/${HOME_USER}/.vscode/cli 2>/dev/null)" ]; then
|
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms --name ${VSCODE_TUNNEL_NAME}"
|
||||||
# CLI directory exists and has content, ensure proper permissions first
|
|
||||||
sudo chmod -R a+rwX /home/${HOME_USER}/.vscode/cli
|
|
||||||
|
|
||||||
# Wait briefly to ensure services are up
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
echo "Restarting VS Code tunnel..."
|
|
||||||
# Try to restart, but fall back to normal startup if it fails
|
|
||||||
if ! sudo su ${HOME_USER} -c "code tunnel restart"; then
|
|
||||||
echo "Tunnel restart failed, trying normal startup..."
|
|
||||||
if [[ -v VSCODE_TUNNEL_NAME && -n "${VSCODE_TUNNEL_NAME}" ]]; then
|
|
||||||
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms --name ${VSCODE_TUNNEL_NAME}"
|
|
||||||
else
|
|
||||||
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# No CLI directory or empty, use normal startup
|
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms"
|
||||||
echo "Starting new VS Code tunnel session..."
|
|
||||||
if [[ -v VSCODE_TUNNEL_NAME && -n "${VSCODE_TUNNEL_NAME}" ]]; then
|
|
||||||
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms --name ${VSCODE_TUNNEL_NAME}"
|
|
||||||
else
|
|
||||||
sudo su ${HOME_USER} -c "code tunnel --accept-server-license-terms"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ The following environment variables can be set when running the Docker container
|
|||||||
|
|
||||||
- `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container.
|
- `HOME_USER`: The username of the user running the container. This is used to set the correct permissions on files created in the container.
|
||||||
- `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container.
|
- `VSCODE_TUNNEL_NAME`: The name of the SSH tunnel used by Visual Studio Code to connect to the container.
|
||||||
|
- `HOST_UID` / `HOST_GID` (optional): Force the `HOME_USER` account to use a specific UID/GID instead of the default `1000`. This only applies the first time the user is created: if not set, the container will try to auto-detect the UID/GID from an existing `/home/${HOME_USER}` mount (useful when bind-mounting a host directory owned by a non-1000 user); if that can't be detected either (or the mount reports UID/GID `0`, which some bind mount setups do), it falls back to `1000`. If the container is restarted/reused and the user already exists, its UID/GID is only resynced (`usermod`/`groupmod`, with files re-owned accordingly) when `HOST_UID`/`HOST_GID` are explicitly set — auto-detection from the mount is not used to resync an existing user, since mount metadata can be unreliable across restarts.
|
||||||
|
|
||||||
### Custom Environment Variables
|
### Custom Environment Variables
|
||||||
|
|
||||||
@@ -39,15 +40,6 @@ docker run -it -e HOME_USER=custom-home-user -e GLOBAL_ENV_MY_GLOBAL_VARIABLE=my
|
|||||||
```
|
```
|
||||||
In this example, MY_GLOBAL_VARIABLE will be set to my_global_value in the /etc/environment file.
|
In this example, MY_GLOBAL_VARIABLE will be set to my_global_value in the /etc/environment file.
|
||||||
|
|
||||||
### Persistent VS Code Tunnel
|
|
||||||
|
|
||||||
You can maintain the VS Code tunnel configuration between container restarts by adding a volume mount to `/home/${HOME_USER}/.vscode/cli`. When this volume is mounted and the container restarts, it will use `code tunnel restart` to reconnect using the existing tunnel configuration instead of creating a new one.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
```bash
|
|
||||||
docker run -it -e HOME_USER=custom-home-user -e VSCODE_TUNNEL_NAME=vscode-ssh-remote-server -v /path/to/vscode-cli:/home/custom-home-user/.vscode/cli -v /path/to/extensions.json:/home/extensions.json aleleba/vscode
|
|
||||||
```
|
|
||||||
|
|
||||||
### Adding VSCode Extensions
|
### Adding VSCode Extensions
|
||||||
|
|
||||||
To add VSCode extensions to the container, create a JSON file with an array of objects containing the extension details you want to install, the only Mandatory field is uniqueIdentifier and follow this structure. For example:
|
To add VSCode extensions to the container, create a JSON file with an array of objects containing the extension details you want to install, the only Mandatory field is uniqueIdentifier and follow this structure. For example:
|
||||||
@@ -184,6 +176,8 @@ RUN echo 'source ~/.nvm/nvm.sh' >> ~/.bashrc
|
|||||||
|
|
||||||
> **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.
|
> **Note:** If you are using this image as a base image in a Dockerfile, ensure that the value of `HOME_USER` is the same as the one you will use when creating the container. This is necessary to ensure that all configurations and packages are installed in the correct user directory.
|
||||||
|
|
||||||
|
> **Note:** The `--uid 1000` in the example above is just illustrative. If you run the final container with `HOST_UID`/`HOST_GID` set (or with `/home/${HOME_USER}` bind-mounted from a host directory owned by another user), `entrypoint.sh` will resync this user's UID/GID at container start.
|
||||||
|
|
||||||
> **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.
|
> **Note:** To grant access to the server, please log into https://github.com/login/device and use the code XXXX-XXXX. You can view the container logs to get the code.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
3.2.1
|
3.2.28
|
||||||
|
|||||||
Reference in New Issue
Block a user