Compare commits

...

22 Commits

Author SHA1 Message Date
Vladimir Protsenko 32e1aeca89 Update 'readme.md' 9 months ago
Vladimir Protsenko 1019666122 Updated version of the base image 9 months ago
Vladimir Protsenko 21caf98d27 Update 'vscode.sh' 9 months ago
Vladimir Protsenko 0e9309dc70 Update 'Dockerfile' 10 months ago
Vladimir Protsenko 1c3e45e858 Added second default port for web app that could be inside the docker (gradio, nginx, apache, ...) 10 months ago
Vladimir Protsenko fefb3ef46b switch to cheburnet version of vscode install script 1 year ago
Vladimir Protsenko b7ef654c51 cheburnet version of vscode install script 1 year ago
Vladimir Protsenko d0b2d5d833 Fix image name 1 year ago
Vladimir Protsenko c1262a932b Fix image name 1 year ago
Vladimir Protsenko a360d0c3df Fix bug with dup config strings. 1 year ago
Vladimir Protsenko 867ddf9a6e Install ipykernel for conda base environment. 1 year ago
Vladimir Protsenko 0c520df93f Install python extension for user, not for root. 1 year ago
Vladimir Protsenko b2593abf48 Vscode template 1 year ago
Vladimir Protsenko f71f16dc01 Vscode template 1 year ago
Vladimir Protsenko bd0fd0b410 Vscode template 1 year ago
Vladimir Protsenko 493febf4b5 Vscode template 1 year ago
Vladimir Protsenko 002c231acc Vscode template 1 year ago
Vladimir Protsenko 8838f0eae9 Vscode template 1 year ago
Vladimir Protsenko ac8f3b2e5a Vscode template 1 year ago
Vladimir Protsenko bed15d8e6b Vscode template 1 year ago
Vladimir Protsenko 26e96b0189 Vscode template 1 year ago
Vladimir Protsenko e8a339ea30 Vscode template 1 year ago

@ -1,23 +1,39 @@
FROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
#FROM tensorflow/tensorflow:2.12.0-gpu
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
ENV TZ=Europe/Samara
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ARG USER
ARG GROUP
ARG UID
ARG GID
RUN apt update
RUN apt install sudo -y
RUN sed -i 's/^%sudo.*/%sudo ALL=(ALL) NOPASSWD: ALL/' /etc/sudoers
RUN groupadd --gid ${GID} ${GROUP}
RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} --create-home ${USER}
RUN useradd --shell /bin/bash --uid ${UID} --gid ${GID} -G sudo --create-home ${USER}
RUN mkdir /wd
RUN chown ${USER}:${GROUP} /wd
# SYSTEM INITIALIZATION
# RUN pip install jupyter
# SYSTEM CONFIGURATION
RUN apt install vim htop mc curl wget git tree -y
RUN curl -fsSL https://code-server.dev/install.sh | sh
RUN /opt/conda/bin/conda install -n base ipykernel --update-deps --force-reinstall -y
USER ${USER}
# USER INITIALIZATION
# USER CONFIGURATION
# RUN ...
RUN openssl req -x509 -newkey rsa:4096 -keyout /home/${USER}/key.pem -out /home/${USER}/cert.pem -sha256 -nodes -days 365 -subj "/C=RU/ST=SamaraRegion/L=Samara/O=SSAU/OU=LIAV/CN=vscode.ssau.ru/"
RUN mkdir -p /home/${USER}/.config/code-server
RUN echo 'bind-addr: 0.0.0.0:8443' >> /home/${USER}/.config/code-server/config.yaml
RUN echo "cert: /home/${USER}/cert.pem" >> /home/${USER}/.config/code-server/config.yaml
RUN echo "cert-key: /home/${USER}/key.pem" >> /home/${USER}/.config/code-server/config.yaml
RUN code-server --install-extension ms-python.python
ENV SHELL=/bin/bash
SHELL ["/bin/bash", "--login", "-i", "-c"]
WORKDIR /wd
WORKDIR /wd

@ -1,7 +1,7 @@
#!/bin/bash
CURDIRNAME=${PWD##*/}
docker build . -t ${USER}_${CURDIRNAME} \
docker build . -t ${USER}_${CURDIRNAME}_vscode \
--build-arg USER=${USER} \
--build-arg GROUP=${USER} \
--build-arg UID=$(id -u ${USER}) \

@ -0,0 +1,618 @@
#!/bin/sh
set -eu
# code-server's automatic install script.
# See https://coder.com/docs/code-server/latest/install
usage() {
arg0="$0"
if [ "$0" = sh ]; then
arg0="curl -fsSL https://code-server.dev/install.sh | sh -s --"
else
not_curl_usage="The latest script is available at https://code-server.dev/install.sh
"
fi
cath << EOF
Installs code-server.
It tries to use the system package manager if possible.
After successful installation it explains how to start using code-server.
Pass in user@host to install code-server on user@host over ssh.
The remote host must have internet access.
${not_curl_usage-}
Usage:
$arg0 [--dry-run] [--version X.X.X] [--edge] [--method detect] \
[--prefix ~/.local] [--rsh ssh] [user@host]
--dry-run
Echo the commands for the install process without running them.
--version X.X.X
Install a specific version instead of the latest.
--edge
Install the latest edge version instead of the latest stable version.
--method [detect | standalone]
Choose the installation method. Defaults to detect.
- detect detects the system package manager and tries to use it.
Full reference on the process is further below.
- standalone installs a standalone release archive into ~/.local
Add ~/.local/bin to your \$PATH to use it.
--prefix <dir>
Sets the prefix used by standalone release archives. Defaults to ~/.local
The release is unarchived into ~/.local/lib/code-server-X.X.X
and the binary symlinked into ~/.local/bin/code-server
To install system wide pass --prefix=/usr/local
--rsh <bin>
Specifies the remote shell for remote installation. Defaults to ssh.
The detection method works as follows:
- Debian, Ubuntu, Raspbian: install the deb package from GitHub.
- Fedora, CentOS, RHEL, openSUSE: install the rpm package from GitHub.
- Arch Linux: install from the AUR (which pulls releases from GitHub).
- FreeBSD, Alpine: install from npm.
- macOS: install using Homebrew if installed otherwise install from GitHub.
- All others: install the release from GitHub.
We only build releases on GitHub for amd64 and arm64 on Linux and amd64 for
macOS. When the detection method tries to pull a release from GitHub it will
fall back to installing from npm when there is no matching release for the
system's operating system and architecture.
The standalone method will force installion using GitHub releases. It will not
fall back to npm so on architectures without pre-built releases this will error.
The installer will cache all downloaded assets into ~/.cache/code-server
More installation docs are at https://coder.com/docs/code-server/latest/install
EOF
}
echo_latest_version() {
if [ "${EDGE-}" ]; then
version="$(curl -fsSL https://api.github.com/repos/coder/code-server/releases | awk 'match($0,/.*"html_url": "(.*\/releases\/tag\/.*)".*/)' | head -n 1 | awk -F '"' '{print $4}')"
else
# https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c#gistcomment-2758860
version="$(curl -fsSLI -o /dev/null -w "%{url_effective}" https://github.com/coder/code-server/releases/latest)"
fi
version="${version#https://github.com/coder/code-server/releases/tag/}"
version="${version#v}"
echo "$version"
}
echo_npm_postinstall() {
echoh
cath << EOF
npm package has been installed.
Extend your path to use code-server:
PATH="$NPM_BIN_DIR:\$PATH"
Then run with:
code-server
EOF
}
echo_standalone_postinstall() {
echoh
cath << EOF
Standalone release has been installed into $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION
Extend your path to use code-server:
PATH="$STANDALONE_INSTALL_PREFIX/bin:\$PATH"
Then run with:
code-server
EOF
}
echo_brew_postinstall() {
echoh
cath << EOF
Brew release has been installed.
Run with:
code-server
EOF
}
echo_systemd_postinstall() {
echoh
cath << EOF
$1 package has been installed.
To have systemd start code-server now and restart on boot:
sudo systemctl enable --now code-server@\$USER
Or, if you don't want/need a background service you can run:
code-server
EOF
}
echo_coder_postinstall() {
echoh
echoh "Deploy code-server for your team with Coder: https://github.com/coder/coder"
}
main() {
if [ "${TRACE-}" ]; then
set -x
fi
unset \
DRY_RUN \
METHOD \
OPTIONAL \
ALL_FLAGS \
RSH_ARGS \
EDGE \
RSH
ALL_FLAGS=""
while [ "$#" -gt 0 ]; do
case "$1" in
-*)
ALL_FLAGS="${ALL_FLAGS} $1"
;;
esac
case "$1" in
--dry-run)
DRY_RUN=1
;;
--method)
METHOD="$(parse_arg "$@")"
shift
;;
--method=*)
METHOD="$(parse_arg "$@")"
;;
--prefix)
STANDALONE_INSTALL_PREFIX="$(parse_arg "$@")"
shift
;;
--prefix=*)
STANDALONE_INSTALL_PREFIX="$(parse_arg "$@")"
;;
--version)
VERSION="$(parse_arg "$@")"
shift
;;
--version=*)
VERSION="$(parse_arg "$@")"
;;
--edge)
EDGE=1
;;
--rsh)
RSH="$(parse_arg "$@")"
shift
;;
--rsh=*)
RSH="$(parse_arg "$@")"
;;
-h | --h | -help | --help)
usage
exit 0
;;
--)
shift
# We remove the -- added above.
ALL_FLAGS="${ALL_FLAGS% --}"
RSH_ARGS="$*"
break
;;
-*)
echoerr "Unknown flag $1"
echoerr "Run with --help to see usage."
exit 1
;;
*)
RSH_ARGS="$*"
break
;;
esac
shift
done
if [ "${RSH_ARGS-}" ]; then
RSH="${RSH-ssh}"
echoh "Installing remotely with $RSH $RSH_ARGS"
curl -fsSL https://code-server.dev/install.sh | prefix "$RSH_ARGS" "$RSH" "$RSH_ARGS" sh -s -- "$ALL_FLAGS"
return
fi
METHOD="${METHOD-detect}"
if [ "$METHOD" != detect ] && [ "$METHOD" != standalone ]; then
echoerr "Unknown install method \"$METHOD\""
echoerr "Run with --help to see usage."
exit 1
fi
# These are used by the various install_* functions that make use of GitHub
# releases in order to download and unpack the right release.
CACHE_DIR=$(echo_cache_dir)
STANDALONE_INSTALL_PREFIX=${STANDALONE_INSTALL_PREFIX:-$HOME/.local}
VERSION=${VERSION:-$(echo_latest_version)}
# These can be overridden for testing but shouldn't normally be used as it can
# result in a broken code-server.
OS=${OS:-$(os)}
ARCH=${ARCH:-$(arch)}
distro_name
# Standalone installs by pulling pre-built releases from GitHub.
if [ "$METHOD" = standalone ]; then
if has_standalone; then
install_standalone
echo_coder_postinstall
exit 0
else
echoerr "There are no standalone releases for $ARCH"
echoerr "Please try again without '--method standalone'"
exit 1
fi
fi
# DISTRO can be overridden for testing but shouldn't normally be used as it
# can result in a broken code-server.
DISTRO=${DISTRO:-$(distro)}
case $DISTRO in
# macOS uses brew when available and falls back to standalone. We only have
# amd64 for macOS so for anything else use npm.
macos)
BREW_PATH="${BREW_PATH-brew}"
if command_exists "$BREW_PATH"; then
install_brew
else
echoh "Homebrew not installed."
echoh "Falling back to standalone installation."
npm_fallback install_standalone
fi
;;
# The .deb and .rpm files are pulled from GitHub and we only have amd64 and
# arm64 there and need to fall back to npm otherwise.
debian) npm_fallback install_deb ;;
fedora | opensuse) npm_fallback install_rpm ;;
# Arch uses the AUR package which only supports amd64 and arm64 since it
# pulls releases from GitHub so we need to fall back to npm.
arch) npm_fallback install_aur ;;
# We don't have GitHub releases that work on Alpine or FreeBSD so we have no
# choice but to use npm here.
alpine | freebsd) install_npm ;;
# For anything else we'll try to install standalone but fall back to npm if
# we don't have releases for the architecture.
*)
echoh "Unsupported package manager."
echoh "Falling back to standalone installation."
npm_fallback install_standalone
;;
esac
echo_coder_postinstall
}
parse_arg() {
case "$1" in
*=*)
# Remove everything after first equal sign.
opt="${1%%=*}"
# Remove everything before first equal sign.
optarg="${1#*=}"
if [ ! "$optarg" ] && [ ! "${OPTIONAL-}" ]; then
echoerr "$opt requires an argument"
echoerr "Run with --help to see usage."
exit 1
fi
echo "$optarg"
return
;;
esac
case "${2-}" in
"" | -*)
if [ ! "${OPTIONAL-}" ]; then
echoerr "$1 requires an argument"
echoerr "Run with --help to see usage."
exit 1
fi
;;
*)
echo "$2"
return
;;
esac
}
fetch() {
URL="$1"
FILE="$2"
if [ -e "$FILE" ]; then
echoh "+ Reusing $FILE"
return
fi
sh_c mkdir -p "$CACHE_DIR"
sh_c curl \
-#fL \
-o "$FILE.incomplete" \
-C - \
"$URL"
sh_c mv "$FILE.incomplete" "$FILE"
}
install_brew() {
echoh "Installing latest from Homebrew."
echoh
sh_c "$BREW_PATH" install code-server
echo_brew_postinstall
}
install_deb() {
echoh "Installing v$VERSION of the $ARCH deb package from GitHub."
echoh
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server_${VERSION}_$ARCH.deb" \
"$CACHE_DIR/code-server_${VERSION}_$ARCH.deb"
sudo_sh_c dpkg -i "$CACHE_DIR/code-server_${VERSION}_$ARCH.deb"
echo_systemd_postinstall deb
}
install_rpm() {
echoh "Installing v$VERSION of the $ARCH rpm package from GitHub."
echoh
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server-$VERSION-$ARCH.rpm" \
"$CACHE_DIR/code-server-$VERSION-$ARCH.rpm"
sudo_sh_c rpm -U "$CACHE_DIR/code-server-$VERSION-$ARCH.rpm"
echo_systemd_postinstall rpm
}
install_aur() {
echoh "Installing latest from the AUR."
echoh
sh_c mkdir -p "$CACHE_DIR/code-server-aur"
sh_c "curl -#fsSL https://aur.archlinux.org/cgit/aur.git/snapshot/code-server.tar.gz | tar -xzC $CACHE_DIR/code-server-aur --strip-components 1"
echo "+ cd $CACHE_DIR/code-server-aur"
if [ ! "${DRY_RUN-}" ]; then
cd "$CACHE_DIR/code-server-aur"
fi
sh_c makepkg -si --noconfirm
echo_systemd_postinstall AUR
}
install_standalone() {
echoh "Installing v$VERSION of the $ARCH release from GitHub."
echoh
fetch "https://github.com/coder/code-server/releases/download/v$VERSION/code-server-$VERSION-$OS-$ARCH.tar.gz" \
"$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz"
# -w only works if the directory exists so try creating it first. If this
# fails we can ignore the error as the -w check will then swap us to sudo.
sh_c mkdir -p "$STANDALONE_INSTALL_PREFIX" 2> /dev/null || true
sh_c="sh_c"
if [ ! -w "$STANDALONE_INSTALL_PREFIX" ]; then
sh_c="sudo_sh_c"
fi
if [ -e "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION" ]; then
echoh
echoh "code-server-$VERSION is already installed at $STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION"
echoh "Remove it to reinstall."
exit 0
fi
"$sh_c" mkdir -p "$STANDALONE_INSTALL_PREFIX/lib" "$STANDALONE_INSTALL_PREFIX/bin"
"$sh_c" tar -C "$STANDALONE_INSTALL_PREFIX/lib" -xzf "$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz"
"$sh_c" mv -f "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION-$OS-$ARCH" "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION"
"$sh_c" ln -fs "$STANDALONE_INSTALL_PREFIX/lib/code-server-$VERSION/bin/code-server" "$STANDALONE_INSTALL_PREFIX/bin/code-server"
echo_standalone_postinstall
}
install_npm() {
echoh "Installing latest from npm."
echoh
NPM_PATH="${YARN_PATH-npm}"
if command_exists "$NPM_PATH"; then
sh_c="sh_c"
if [ ! "${DRY_RUN-}" ] && [ ! -w "$(NPM_PATH config get prefix)" ]; then
sh_c="sudo_sh_c"
fi
echoh "Installing with npm."
echoh
"$sh_c" "$NPM_PATH" install -g code-server --unsafe-perm
NPM_BIN_DIR="\$($NPM_PATH bin -g)" echo_npm_postinstall
return
fi
echoerr "Please install npm to install code-server!"
echoerr "You will need at least node v12 and a few C dependencies."
echoerr "See the docs https://coder.com/docs/code-server/latest/install#npm"
exit 1
}
# Run $1 if we have a standalone otherwise run install_npm.
npm_fallback() {
if has_standalone; then
$1
else
echoh "No standalone releases for $ARCH."
echoh "Falling back to installation from npm."
install_npm
fi
}
# Determine if we have standalone releases on GitHub for the system's arch.
has_standalone() {
case $ARCH in
amd64) return 0 ;;
# We only have amd64 for macOS.
arm64)
[ "$(distro)" != macos ]
return
;;
*) return 1 ;;
esac
}
os() {
uname="$(uname)"
case $uname in
Linux) echo linux ;;
Darwin) echo macos ;;
FreeBSD) echo freebsd ;;
*) echo "$uname" ;;
esac
}
# Print the detected Linux distro, otherwise print the OS name.
#
# Example outputs:
# - macos -> macos
# - freebsd -> freebsd
# - ubuntu, raspbian, debian ... -> debian
# - amzn, centos, rhel, fedora, ... -> fedora
# - opensuse-{leap,tumbleweed} -> opensuse
# - alpine -> alpine
# - arch, manjaro, endeavouros, ... -> arch
#
# Inspired by https://github.com/docker/docker-install/blob/26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c/install.sh#L111-L120.
distro() {
if [ "$OS" = "macos" ] || [ "$OS" = "freebsd" ]; then
echo "$OS"
return
fi
if [ -f /etc/os-release ]; then
(
. /etc/os-release
if [ "${ID_LIKE-}" ]; then
for id_like in $ID_LIKE; do
case "$id_like" in debian | fedora | opensuse | arch)
echo "$id_like"
return
;;
esac
done
fi
echo "$ID"
)
return
fi
}
# Print a human-readable name for the OS/distro.
distro_name() {
if [ "$(uname)" = "Darwin" ]; then
echo "macOS v$(sw_vers -productVersion)"
return
fi
if [ -f /etc/os-release ]; then
(
. /etc/os-release
echo "$PRETTY_NAME"
)
return
fi
# Prints something like: Linux 4.19.0-9-amd64
uname -sr
}
arch() {
uname_m=$(uname -m)
case $uname_m in
aarch64) echo arm64 ;;
x86_64) echo amd64 ;;
*) echo "$uname_m" ;;
esac
}
command_exists() {
if [ ! "$1" ]; then return 1; fi
command -v "$@" > /dev/null
}
sh_c() {
echoh "+ $*"
if [ ! "${DRY_RUN-}" ]; then
sh -c "$*"
fi
}
sudo_sh_c() {
if [ "$(id -u)" = 0 ]; then
sh_c "$@"
elif command_exists doas; then
sh_c "doas $*"
elif command_exists sudo; then
sh_c "sudo $*"
elif command_exists su; then
sh_c "su root -c '$*'"
else
echoh
echoerr "This script needs to run the following command as root."
echoerr " $*"
echoerr "Please install doas, sudo, or su."
exit 1
fi
}
echo_cache_dir() {
if [ "${XDG_CACHE_HOME-}" ]; then
echo "$XDG_CACHE_HOME/code-server"
elif [ "${HOME-}" ]; then
echo "$HOME/.cache/code-server"
else
echo "/tmp/code-server-cache"
fi
}
echoh() {
echo "$@" | humanpath
}
cath() {
humanpath
}
echoerr() {
echoh "$@" >&2
}
# humanpath replaces all occurrences of " $HOME" with " ~"
# and all occurrences of '"$HOME' with the literal '"$HOME'.
humanpath() {
sed "s# $HOME# ~#g; s#\"$HOME#\"\$HOME#g"
}
# We need to make sure we exit with a non zero exit if the command fails.
# /bin/sh does not support -o pipefail unfortunately.
prefix() {
PREFIX="$1"
shift
fifo="$(mktemp -d)/fifo"
mkfifo "$fifo"
sed -e "s#^#$PREFIX: #" "$fifo" &
"$@" > "$fifo" 2>&1
}
main "$@"

@ -1,4 +0,0 @@
#!/bin/bash
CURDIRNAME=${PWD##*/}
docker run -d --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME}

@ -1,4 +0,0 @@
#!/bin/bash
CURDIRNAME=${PWD##*/}
docker run -it --rm --gpus "device=0" -p 8888:8888 -v $(pwd):/wd --name ${USER}_${CURDIRNAME} ${USER}_${CURDIRNAME}

@ -1,14 +1,36 @@
Для запуска vscode на сервере скопируйте в терминал и запустите:
```
PROJECT=myprojectname; git clone https://git.ai.ssau.ru/liav/docker_template --branch vscode $PROJECT; cd $PROJECT; ./build.sh; ./vscode.sh
```
Если порт занят, поменяйте его в скрипте `vscode.sh` и запустите `./vscode.sh` заново.
При использовании этой схемы будет получен контейнер с пользователем, идентичным пользователю в `host` системе. Новые файлы (логи/модели etm.) и процессы в диспетчере процессов (top/htop) хоста будут принадлежать вашему пользователю. Параметр `-v $(pwd):/wd ` в `start` скриптах означает, что директория `/wd` в контейнере будет связана с текущей папкой на хосте.
Настроить рабочее окружение в контейнере можно либо классическим способом внутри контейнера, с возможностью эскалации прав до root командой `sudo`. Либо в более воспроизводимом ключе по шагам:
1. Скачивание шаблона в новую папку с названием `myprojectname`, переход в неё по завершению
```
git clone https://git.ai.ssau.ru/liav/docker_template myproject
cd myproject
PROJECT=myprojectname; git clone https://git.ai.ssau.ru/liav/docker_template --branch vscode $PROJECT; cd $PROJECT
```
Модифицируйте `Dockerfile` для выбора базового образа из https://hub.docker.com/ и установки зависимостей. Отредактируйте .dockerfile, если хотите скопировать файлы в образ командой COPY (по-умолчанию файлы не отправляются в контекст для ускорения сборки).
2. Редактирование Dockerfile для смены базового образа, установки ПО и настройки среды образа.
3. Выполнение построения образа/отладка процесса построения
```
./build.sh
./start_daemon.sh или ./start_interactively.sh
```
-----------------------------------
При использовании этой схемы будет получен контейнер с пользователем, идентичным пользователю в `host` системе. Новые файлы (логи/модели etm.) и процессы в диспетчере процессов (top/htop) хоста будут принадлежать вашему пользователю.
Параметр `-v $(pwd):/wd ` в `start` скриптах означает, что директория `/wd` в контейнере будет связана с текущей папкой на хосте.
4. Редактирование аргументов запуска контейнера:
- изменение номера/добавление доступных ГПУ в запускаемом контейнере (`--gpus` аргумент),
- изменение порта для vscode (`-p` аргумент),
- добавление папок хост системы, доступных из контейнера (`-v` аргумент).
5. Запуск контейнера на основе построенного образа
```
./vscode.sh
```
Для остановки vscode используйте `./stop.sh`.
При ошибке просмотра ipynb файлов "could not register service worker" попробуйте Firefox.

@ -0,0 +1,4 @@
#!/bin/bash
CURDIRNAME=${PWD##*/}
docker stop ${USER}_${CURDIRNAME}_vscode

@ -0,0 +1,25 @@
#!/bin/bash
CURDIRNAME=${PWD##*/}
VSCODE_PORT=8400
YOURAPP_INSIDE_DOCKER_PORT=24000
PASSWORD=$(openssl rand -base64 45)
docker run \
-d \
--rm \
--gpus "device=0" \
-p ${VSCODE_PORT}:8443 \
-p ${YOURAPP_INSIDE_DOCKER_PORT}:443 \
-v $(pwd):/wd \
--shm-size=10gb \
--name ${USER}_${CURDIRNAME}_vscode \
-e PASSWORD="${PASSWORD}" \
${USER}_${CURDIRNAME}_vscode \
code-server
sleep 1
docker logs ${USER}_${CURDIRNAME}_vscode
echo ""
echo "Address: https://$(hostname -i | awk '{ print $1; }'):${VSCODE_PORT}"
echo "Password: $PASSWORD"
echo ""
echo "You can use this port for application you develop: $YOURAPP_INSIDE_DOCKER_PORT"
Loading…
Cancel
Save