Files
distrobox/extras/docker-host
Luca Di Maio 3147de0d10 vscode: improve podman wrapper, add docker wrapper, fix reconnections
Improve wrapper by using pure podman, dropping using distrobox.
Inject ENV and change default USER.
Add Docker wrapper
This improves stability, reliability of the wrapper.

Fix #1421

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2024-06-20 15:57:27 +02:00

64 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
id="$(echo "$@" | grep -Eo ' [a-zA-Z0-9]{64} ' | tr -d ' ')"
DOCKER_COMMAND="$(command -v docker 2> /dev/null)"
ENV_COMMAND="printenv"
# if we're in a flatpak, we fallback to host-spawn
if [ -n "${FLATPAK_ID}" ]; then
DOCKER_COMMAND="flatpak-spawn --host docker"
ENV_COMMAND="flatpak-spawn --host printenv"
fi
# This little workaround is used to ensure
# we use our distrobox to properly enter the container
if echo "$@" | grep -q 'exec'; then
# we do this procedure only for distroboxes
# we will leave regular containers alone.
if [ "$(${DOCKER_COMMAND} inspect --type container --format '{{ index .Config.Labels "manager" }}' "${id}")" = "distrobox" ]; then
# Ensure that our distrobox containers will use different vscode-servers
# by symlinking to different paths
# This is necessary because vscode-server will always use $HOME/.vscode-server
# so we're forced to do this workaround
if [ -n "${id}" ]; then
# shellcheck disable=SC2016
${DOCKER_COMMAND} exec -u "${USER}" "${id}" /bin/sh -c '
if [ ! -L "${HOME}/.vscode-server" ]; then
[ -e "${HOME}/.vscode-server" ] && mv "${HOME}/.vscode-server" /var/tmp
[ -d /var/tmp/.vscode-server ] || mkdir /var/tmp/.vscode-server
ln -sf /var/tmp/.vscode-server "$HOME"
elif [ ! -e "${HOME}/.vscode-server" ]; then
mkdir /var/tmp/.vscode-server
ln -sf /var/tmp/.vscode-server "$HOME"
fi
'
fi
for i; do
# interject root:root, we want to be our own user
if echo "${i}" | grep -q "root:root"; then
set -- "$@" "${USER}:${USER}"
shift
# inject host's environment
elif echo "${i}" | grep -q "exec"; then
set -- "$@" "exec"
shift
# inject host's environment
for j in $(${ENV_COMMAND} | grep '=' | grep -Ev ' |"|`|\$' |
# refer to distrobox-enter:L454
grep -Ev '^(CONTAINER_ID|HOST|HOSTNAME|HOME|PATH|PROFILEREAD|SHELL|XDG_SEAT|XDG_VTNR|XDG_.*_DIRS|^_)'); do
set -- "$@" "--env"
set -- "$@" "${j}"
done
else
set -- "$@" "${i}"
shift
fi
done
fi
fi
${DOCKER_COMMAND} "$@"