mirror of
https://github.com/aleleba/aleleba-vscode-dockerfile-configuration.git
synced 2026-07-16 12:17:07 -06:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
47b624b708
|
|||
|
6682a59f53
|
|||
|
3b1a175eac
|
|||
|
69e52bcac1
|
|||
|
9a998f3e0c
|
|||
|
48ca077a44
|
|||
|
6186b16503
|
|||
|
6131b86b48
|
|||
|
8080ba8110
|
|||
|
cfe27a3e86
|
|||
|
bfeb1e8a08
|
|||
|
0ecbe1c0ad
|
|||
|
085c5db158
|
|||
|
b6603398e2
|
|||
|
7076f09b06
|
|||
|
dc46ee00a3
|
|||
|
fba2d768e9
|
43
.github/workflows/main-workflow.yml
vendored
43
.github/workflows/main-workflow.yml
vendored
@@ -8,23 +8,46 @@ jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
- name: Checkout
|
||||
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
|
||||
-
|
||||
name: Login to DockerHub
|
||||
|
||||
# 🔑 Login to DockerHub
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
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
|
||||
with:
|
||||
context: .
|
||||
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"}}'
|
||||
|
||||
15
Dockerfile
15
Dockerfile
@@ -29,13 +29,16 @@ RUN curl -sL https://aka.ms/DevTunnelCliInstall | bash
|
||||
|
||||
#Instalando VSCode
|
||||
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 install -y gnupg2 \
|
||||
&& sudo apt-get install -y software-properties-common \
|
||||
&& 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
|
||||
&& sudo DEBIAN_FRONTEND=noninteractive apt-get install -f -y \
|
||||
&& rm -f /tmp/vscode.deb
|
||||
|
||||
#Making home writable
|
||||
RUN sudo chmod -R a+rwX /home
|
||||
|
||||
@@ -5,6 +5,13 @@ if [[ -z "${HOME_USER-}" ]]; then
|
||||
HOME_USER="vscode"
|
||||
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)
|
||||
TARGET_UID="${HOST_UID:-$DETECTED_UID}"
|
||||
TARGET_GID="${HOST_GID:-$DETECTED_GID}"
|
||||
|
||||
if ! grep -q "HOME_USER=" /etc/environment; then
|
||||
sudo bash -c "echo HOME_USER=$HOME_USER >> /etc/environment"
|
||||
fi
|
||||
@@ -48,6 +55,13 @@ sed 's/^USER_ENV_//' |
|
||||
# Append the result to /usr/bin/.bashrc
|
||||
while IFS= read -r line
|
||||
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
|
||||
if [ "$(id -u)" = "0" ]; then
|
||||
echo "" >> /usr/bin/.bashrc
|
||||
@@ -59,8 +73,9 @@ do
|
||||
done
|
||||
|
||||
USER="$HOME_USER"
|
||||
if ! id -u $HOME_USER > /dev/null 2>&1; then
|
||||
sudo adduser --disabled-password --gecos "" --uid 1000 ${HOME_USER}
|
||||
if ! id -u "$HOME_USER" > /dev/null 2>&1; then
|
||||
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
|
||||
|
||||
# Creating .vscode folder if it doesn't exist
|
||||
@@ -70,13 +85,29 @@ if ! id -u $HOME_USER > /dev/null 2>&1; then
|
||||
|
||||
# Changing the property of the directory /home/${HOME_USER}/.vscode
|
||||
sudo chown -R ${HOME_USER} /home/${HOME_USER}/.vscode
|
||||
else
|
||||
# Usuario ya existe (imagen/volumen reusado) — resincronizar UID/GID si cambiaron
|
||||
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
|
||||
|
||||
# Then execute entrypoint.sh
|
||||
if [ "$HOME_USER" != "$(whoami)" ]; then
|
||||
exec sudo -u $HOME_USER bash -c "source /etc/environment; /usr/bin/entrypoint.sh"
|
||||
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
|
||||
sudo chmod 755 /home/${HOME_USER}/.ssh
|
||||
sudo chmod -R 600 /home/${HOME_USER}/.ssh/*
|
||||
@@ -152,7 +183,7 @@ if [ -f "/home/extensions.json" ]; then
|
||||
# Loop through the extensions and process each element
|
||||
for extension in $extensions; do
|
||||
echo "Installing extension: $extension"
|
||||
sudo su ${HOME_USER} -c "code --install-extension $extension"
|
||||
sudo su ${HOME_USER} -c "code --install-extension $extension --force"
|
||||
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-insiders
|
||||
|
||||
@@ -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.
|
||||
- `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`. 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, it falls back to `1000`. If the container is restarted/reused and the UID/GID changed, the existing user is resynced (`usermod`/`groupmod`) and its files re-owned accordingly.
|
||||
|
||||
### Custom Environment Variables
|
||||
|
||||
@@ -175,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:** 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.
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -1 +1 @@
|
||||
3.2.9
|
||||
3.2.25
|
||||
|
||||
Reference in New Issue
Block a user