Using Code, you can install
and activate extensions in an offline or air-gapped environment by loading them from local
.vsix files specified in the dev container configuration.
You can load extensions from a local .vsix file by specifying a relative path. This
approach allows offline or air-gapped environments to activate extensions and is
also necessary for proprietary extensions that should not be published publicly,
without requiring access to the Open VSX registry.
-
Place your .vsix extension files into a local folder, such as extensions/
inside a cloned .devopsconfig repository:
This allows offline environments to access the extensions without connecting
to the Open VSX registry.
-
Reference the local .vsix files in your dev container configuration file
(devcontainer.json):
devcontainer.json example:
{
"name": "Node",
"description": "Node codeserver environment with offline extensions",
"build": {
"dockerfile": "./Dockerfile"
},
"customizations": {
"vscode": {
"extensions": [
"IBM.wca-core-1.6.2.vsix",
"ms-python.python-2025.14.0.vsix"
]
}
}
}
You can specify the exact version of each extension you want to install and
control updates centrally.
-
Update your Dockerfile to copy the extensions folder into the container during
build:
Dockerfile example:
FROM mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y sudo curl git gnupg pass pinentry-tty && \
apt-get clean
RUN curl -fsSL https://github.com/git-ecosystem/git-credential-manager/releases/download/v2.6.1/gcm-linux_amd64.2.6.1.tar.gz -o gcm.tar.gz \
&& tar -xvf gcm.tar.gz -C /usr/local/bin \
&& rm -rf gcm.tar.gz \
&& git-credential-manager configure
RUN curl -fsSL https://code-server.dev/install.sh | sh -s -- --version=4.103.2
COPY extensions /opt/extensions/
USER 1001
CMD ["tail", "-f", "/dev/null"]
This ensures the extensions are installed automatically when the container is
set up.
-
Build and run the dev container:
The extension manager will detect the local .vsix files and install them
during container startup.
You have successfully installed and activated extensions in your dev
container using local .vsix files. The extensions are now immediately available for
use.