Giter Site home page Giter Site logo

devcontainers / images Goto Github PK

View Code? Open in Web Editor NEW
1.0K 30.0 380.0 7.12 MB

Repository for pre-built dev container images published under mcr.microsoft.com/devcontainers

Home Page: https://containers.dev

License: MIT License

Shell 42.76% Dockerfile 8.47% JavaScript 45.54% Batchfile 0.01% Python 0.76% CMake 0.08% C++ 0.17% C# 0.33% Go 0.16% Java 1.12% PHP 0.16% Ruby 0.18% TypeScript 0.26%
containers devcontainers

images's Introduction

Development Containers Images

devcontainers organization logo Development Container Images
Published docker images for use as development containers

A development container is a running Docker container with a well-defined tool/runtime stack and its prerequisites. It allows you to use a container as a full-featured development environment which can be used to run an application, to separate tools, libraries, or runtimes needed for working with a codebase, and to aid in continuous integration and testing.

This repository contains a set of dev container images which are Docker images built with dev container features.

Contents

  • src - Contains reusable dev container images.

Common Questions

How does this repo relate to the dev container spec? What is the dev container specification?

The Development Containers Specification seeks to find ways to enrich existing formats with common development specific settings, tools, and configuration while still providing a simplified, un-orchestrated single container option – so that they can be used as coding environments or for continuous integration and testing. You may review the spec and learn more about it in the devcontainers/spec repo and containers.dev.

This repository supplies images that may be used in dev container configurations that follow the spec.

What is the goal of devcontainer.json?

A devcontainer.json file is similar to launch.json for debugging, but designed to launch (or attach to) a development container instead. At its simplest, all you need is a .devcontainer/devcontainer.json file in your project that references an image, Dockerfile, or docker-compose.yml, and a few properties.

Why do Dockerfiles in this repo use RUN statements with commands separated by &&?

Each RUN statement creates a Docker image "layer". If one RUN statement adds temporary contents, these contents remain in this layer in the image even if they are deleted in a subsequent RUN. This means the image takes more storage locally and results in slower image download times if you publish the image to a registry. You can resolve this problem by using a RUN statement that includes any clean up steps (separated by &&) after a given operation. You can find more tips here.

How can I contribute?

If you want to create your own image or add functionality on top of the images available in this repository, then see How to write Dockerfiles and the dev container features reference.

This repository contains a select set of images, and we encourage the community to host and share additional images, and features rather than adding them here. You may learn more about this process in the guidance in our spec repo. You may also check out the features repo for additional customizations you may adopt or modify for your dev containers.

Feedback

Issues related to these images can be reported in an issue in this repository.

License

Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. See LICENSE.

For images generated from this repository, see LICENSE and NOTICE.txt.

images's People

Contributors

alexander-smolyakov avatar bhupendra-vaishnav avatar chrmarti avatar chuxel avatar compulim avatar dependabot[bot] avatar devcontainers-bot avatar edgonmsft avatar eerhardt avatar eljog avatar gauravsaini04 avatar github-actions[bot] avatar hadirgax avatar jkeech avatar joshaber avatar joshspicer avatar jungaretti avatar luabud avatar michaelcontento avatar nickborgers avatar nmemoto avatar osortega avatar prathameshzarkar9 avatar rosborne132 avatar samruddhikhandale avatar seesharprun avatar tarebyte avatar tiagogodinho avatar timward60 avatar vlnaumov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

images's Issues

didn't notice this before. But even the workspace folder have permission issues

    didn't notice this before. But even the workspace folder have permission issues
@snebjorn ➜ /workspaces/openapi-generator (feature/devcontainer ✗) $ ls
ls: cannot access 'Vagrantfile': Operation not permitted
ls: cannot access 'docs': Operation not permitted
ls: cannot access 'samples': Operation not permitted
ls: cannot access 'bin': Operation not permitted
ls: cannot access 'CODE_OF_CONDUCT.md': Operation not permitted
ls: cannot access 'new.sh': Operation not permitted
ls: cannot access 'docker-compose.yml': Operation not permitted
ls: cannot access 'scripts': Operation not permitted
ls: cannot access 'LICENSE': Operation not permitted
ls: cannot access 'appveyor.yml': Operation not permitted
ls: cannot access 'modules': Operation not permitted
ls: cannot access 'README.md': Operation not permitted
ls: cannot access 'CONTRIBUTING.md': Operation not permitted
ls: cannot access 'google_checkstyle.xml': Operation not permitted
ls: cannot access 'spotbugs-exclude.xml': Operation not permitted
ls: cannot access 'docker-entrypoint.sh': Operation not permitted
ls: cannot access 'bitrise.yml': Operation not permitted
ls: cannot access 'mvnw': Operation not permitted
ls: cannot access 'website': Operation not permitted
ls: cannot access 'sec.gpg.enc': Operation not permitted
ls: cannot access 'shippable.yml': Operation not permitted
ls: cannot access 'openapi-generator.code-workspace': Operation not permitted
ls: cannot access 'CI': Operation not permitted
ls: cannot access 'pom.xml': Operation not permitted
ls: cannot access 'mvnw.cmd': Operation not permitted
ls: cannot access 'run-in-docker.sh': Operation not permitted
ls: cannot access 'Dockerfile': Operation not permitted
appveyor.yml  bitrise.yml  CODE_OF_CONDUCT.md  docker-compose.yml    Dockerfile  google_checkstyle.xml  modules  mvnw.cmd  openapi-generator.code-workspace  README.md         samples  sec.gpg.enc    spotbugs-exclude.xml  website
bin           CI           CONTRIBUTING.md     docker-entrypoint.sh  docs        LICENSE                mvnw     new.sh    pom.xml                           run-in-docker.sh  scripts  shippable.yml  Vagrantfile
@snebjorn ➜ /workspaces/openapi-generator (feature/devcontainer ✗) $ whoami
vscode
@snebjorn ➜ /workspaces/openapi-generator (feature/devcontainer ✗) $ 

Originally posted by @snebjorn in #155 (comment)

Advice on setting up a hybrid Java and Python devcontainer

I want to setup a devcontainers environment for a Django Python project. I was curious about using the SonarLint extension.

SonarLint has a dependency on the JRE11+ being installed.

What is the best approach to take in setting up a devcontainer for this type of project?

What am I trying?

At the minute I am unsuccessfully trying to look at the following folders to try and set my own Dockerfile and devcontainer.json up.

https://github.com/devcontainers/images/tree/main/src/java
https://github.com/devcontainers/images/tree/main/src/python

This uses the mcr.microsoft.com/devcontainers/base:bullseye. My thoughts were to copy the Dockerfile instructions as per the Java Dockerfile then trying to install Python 3.11 separately.

RUN arch="$(dpkg --print-architecture)" \
  ...

 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
     && apt-get -y install --no-install-recommends python3.11 python3-pip

Which yields the following problems in the log file:

#0 5.837 E: Couldn't find any package by glob 'python3.11'
#0 5.837 E: Couldn't find any package by regex 'python3.11'

I've attached by feeble attempt at this for the devcontainer.json and docker file.

devcontainer.json.txt
Dockerfile.txt

guidance

the link guidance in readme is not working

JupyterLab installed for Python 3.9 instead of 3.10 in Universal image

When trying to go through the codespaces-getting-started-ml sample repo in JupyterLab, we are failing to import some packages. This is due to us installing jupyterlab with python 3.9 instead of 3.10. The same does not happen in VS Code.

Repro:

  1. Create a codespace using the repo mentioned above
  2. Connect to JupyterLab using gh cs jupyter
  3. Attempt to run the first cell and notice that it fails to import torch

Notes:

  • You can verify that this is the issue by running pip list to see that jupyterlab is missing from the list of python 3.10 packages and /usr/local/python/3.9.14/bin/pip list to see that it's installed under python 3.9`

cc. @jungaretti @samruddhikhandale

Error invalid mount config for type "bind": stat input/output error

I was trying to run up the most minimalist dev container with the following .devcontainers/devcontainer.json.

{
	"image": "mcr.microsoft.com/devcontainers/python:3.11"
}

Having done the Dev Containers: Rebuild and Reopen in Container and also the without cache option, I keep getting this error. I'm not 100% sure why - I thought I had this working previously at some point.

I have tried clearing down docker images, containers, and volumes

docker ps -q | % { docker stop $_ }
docker ps -a -q | % { docker rm $_ }
docker images -q | % { docker rmi $_ }

docker system prune
docker system prune --volumes

And still I get the error.

Environment

Windows 10
VSCode: 1.74.0
DevContainers Extension: 0.266.1

Client:
Cloud integration: v1.0.29
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:08:16 2022
OS/Arch: windows/amd64
Context: default
Experimental: true

Server: Docker Desktop 4.14.1 (91661)
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.7
Git commit: 3056208
Built: Tue Oct 25 18:00:19 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.9
GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0

Error Summary

docker: Error response from daemon: invalid mount config for type "bind": stat /
run/desktop/mnt/host/t/andez2000/Containers/devcontainers: input/output error.

Error Detail

[2022-12-08T13:59:14.589Z] Start: Starting container
[2022-12-08T13:59:14.590Z] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=t:\andez2000\Containers\devcontainers,target=/workspaces/devcontainers,consistency=cached --mount type=volume,src=vscode,dst=/vscode -l devcontainer.local_folder=t:\andez2000\Containers\devcontainers\python+django+mssql+sonarlint\2-simplest-python-container --entrypoint /bin/sh -l devcontainer.metadata=[{"id":"ghcr.io/devcontainers/features/common-utils:1"},{"id":"ghcr.io/devcontainers/features/git:1"},{"id":"ghcr.io/devcontainers/features/node:1","customizations":{"vscode":{"extensions":["dbaeumer.vscode-eslint"]}}},{"id":"ghcr.io/devcontainers/features/python:1","customizations":{"vscode":{"extensions":["ms-python.python","ms-python.vscode-pylance"],"settings":{"python.defaultInterpreterPath":"/usr/local/python/current/bin/python","python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"}}}},{"customizations":{"vscode":{"settings":{"python.defaultInterpreterPath":"/usr/local/bin/python","python.linting.enabled":true,"python.linting.pylintEnabled":true,"python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"},"extensions":["ms-python.python","ms-python.vscode-pylance"]}},"remoteUser":"vscode"}] mcr.microsoft.com/devcontainers/python:3.11 -c echo Container started
[2022-12-08T13:59:14.908Z] 
[2022-12-08T13:59:15.077Z] docker: Error response from daemon: invalid mount config for type "bind": stat /
run/desktop/mnt/host/t/andez2000/Containers/devcontainers: input/output error.
See 'docker run --help'.
[2022-12-08T13:59:15.172Z] Stop (582 ms): Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=t:\andez2000\Containers\devcontainers,target=/workspaces/devcontainers,consistency=cached --mount type=volume,src=vscode,dst=/vscode -l devcontainer.local_folder=t:\andez2000\Containers\devcontainers\python+django+mssql+sonarlint\2-simplest-python-container --entrypoint /bin/sh -l devcontainer.metadata=[{"id":"ghcr.io/devcontainers/features/common-utils:1"},{"id":"ghcr.io/devcontainers/features/git:1"},{"id":"ghcr.io/devcontainers/features/node:1","customizations":{"vscode":{"extensions":["dbaeumer.vscode-eslint"]}}},{"id":"ghcr.io/devcontainers/features/python:1","customizations":{"vscode":{"extensions":["ms-python.python","ms-python.vscode-pylance"],"settings":{"python.defaultInterpreterPath":"/usr/local/python/current/bin/python","python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"}}}},{"customizations":{"vscode":{"settings":{"python.defaultInterpreterPath":"/usr/local/bin/python","python.linting.enabled":true,"python.linting.pylintEnabled":true,"python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"},"extensions":["ms-python.python","ms-python.vscode-pylance"]}},"remoteUser":"vscode"}] mcr.microsoft.com/devcontainers/python:3.11 -c echo Container started
[2022-12-08T13:59:15.173Z] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=t:\andez2000\Containers\devcontainers\python+django+mssql+sonarlint\2-simplest-python-container
[2022-12-08T13:59:15.180Z] Stop (660 ms): Run: docker events --format {{json .}} --filter event=start
[2022-12-08T13:59:15.502Z] Stop (329 ms): Run: docker ps -q -a --filter label=devcontainer.local_folder=t:\andez2000\Containers\devcontainers\python+django+mssql+sonarlint\2-simplest-python-container
[2022-12-08T13:59:15.504Z] Error: Command failed: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=t:\andez2000\Containers\devcontainers,target=/workspaces/devcontainers,consistency=cached --mount type=volume,src=vscode,dst=/vscode -l devcontainer.local_folder=t:\andez2000\Containers\devcontainers\python+django+mssql+sonarlint\2-simplest-python-container --entrypoint /bin/sh -l devcontainer.metadata=[{"id":"ghcr.io/devcontainers/features/common-utils:1"},{"id":"ghcr.io/devcontainers/features/git:1"},{"id":"ghcr.io/devcontainers/features/node:1","customizations":{"vscode":{"extensions":["dbaeumer.vscode-eslint"]}}},{"id":"ghcr.io/devcontainers/features/python:1","customizations":{"vscode":{"extensions":["ms-python.python","ms-python.vscode-pylance"],"settings":{"python.defaultInterpreterPath":"/usr/local/python/current/bin/python","python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"}}}},{"customizations":{"vscode":{"settings":{"python.defaultInterpreterPath":"/usr/local/bin/python","python.linting.enabled":true,"python.linting.pylintEnabled":true,"python.formatting.autopep8Path":"/usr/local/py-utils/bin/autopep8","python.formatting.blackPath":"/usr/local/py-utils/bin/black","python.formatting.yapfPath":"/usr/local/py-utils/bin/yapf","python.linting.banditPath":"/usr/local/py-utils/bin/bandit","python.linting.flake8Path":"/usr/local/py-utils/bin/flake8","python.linting.mypyPath":"/usr/local/py-utils/bin/mypy","python.linting.pycodestylePath":"/usr/local/py-utils/bin/pycodestyle","python.linting.pydocstylePath":"/usr/local/py-utils/bin/pydocstyle","python.linting.pylintPath":"/usr/local/py-utils/bin/pylint"},"extensions":["ms-python.python","ms-python.vscode-pylance"]}},"remoteUser":"vscode"}] mcr.microsoft.com/devcontainers/python:3.11 -c echo Container started

universal image error: "mount: /tmp: permission denied"

Tried to use the universal image inside .devcontainer but got the error.
image

Then I tried to run the universal image independently but I still get the error: mount: /tmp: permission denied.

Sample of the command I tried: docker run -it --rm mcr.microsoft.com/vscode/devcontainers/universal bash

image

seems error is addressed by --privileged but maybe not the solution

go image does not have the same error:
image

edit: seems weird that there is /home/codespace instead of /home/vscode

root ➜ / $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:101:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:105::/nonexistent:/usr/sbin/nologin
codespace:x:1000:1000::/home/codespace:/bin/bash                  <------------------------------------
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
root ➜ / $ ls /home
codespace                                  <------------------------------------
root ➜ / $

Request to upgrade to newer version of git in default Codespaces image

An internal user brought up the fact that the current version of git installed in codespaces using kitchensink is a couple years old (2.25.1), and asked if we could bump this to a newer version.

One way to do this might be to update the default codespaces image to install a newer version of git.

Another way might be to upgrade the version of Ubuntu used by the kitchensink image to the latest LTS version, 22.04 (we currently use 20.04, which is the previous LTS version).

Whatever approach we take, because kitchensink is used by a lot of people using codespaces, we'd want to be cautious and make sure we don't introduce any regressions.

The purpose of this issue is mainly to raise awareness of this request, and for tracking purposes.

Use nightly toolchain for Rust Dev Image

Is there an easy way for me to use the nightly toolchain via a setting in dockerfile or devcontainer.json for Rust image? Do I need to use the Rust feature instead and build my own image? Enabling rustfmt on save requires nightly at the moment I believe.

`mcr.microsoft.com/devcontainers/base:ubuntu` points to `jammy` & major version release

📢 We have released a new major version for the base-ubuntu image (ie mcr.microsoft.com/devcontainers/base).

ℹ️ Now the mcr.microsoft.com/devcontainers/base:ubuntu points to the latest LTS release (ie. jammy)

Hence, if you previously used mcr.microsoft.com/devcontainers/base:ubuntu with the hope to use the focal variant. It needs to be updated to mcr.microsoft.com/devcontainers/base:focal instead.

ℹ️ Usually, the dev configuration files reference the images by pinning to a major version (details here). In this case, the major version has bumped from 0 to 1

Dev configuration files referencing to the old image tag (ie 0-${VARIANT}) needs to be updated as below 👇

  • 1-ubuntu
  • 1-ubuntu22.04
  • 1-ubuntu-22.04
  • 1-jammy
  • 1-ubuntu20.04
  • 1-ubuntu-20.04
  • 1-focal
  • 1-ubuntu18.04
  • 1-ubuntu-18.04
  • 1-bionic

Images not listed in the history? (and old Rust version?)

I pulled mcr.microsoft.com/devcontainers/rust:bullseye and it seems that the version of Rust is out of date (it should 1.66.1), and I tried to check the history but it was not listed.

$ rustc --version
rustc 1.65.0 (897e37553 2022-11-02)
$ which rustc
/usr/local/cargo/bin/rustc
Development container image information

- Image version: 0.203.4
- Definition ID: rust
- Variant: bullseye
- Source code repository: https://github.com/devcontainers/images
- Source code release/branch: v0.2.35
- Timestamp: Tue, 17 Jan 2023 21:26:44 GMT

More info: https://github.com/devcontainers/images/tree/main/src/rust/history/0.203.4.md

Universal Image ignores USERNAME variable and enforces codespace as user

NODE_PATH="/home/codespace/.nodejs/current"

While reading on this script, all user paths are hardcoded to /home/codespace. However, should that be /home/${USERNAME} instead to honor USERNAME= variable selection at the start of the file?

Sdkman cannot be used with JVM in codespaces

Sdkman is installed by default in the base images, which is potentially quite useful, but it turns out that the base container/VM is doing something special with ${HOME}/.java which conflicts with it.

In codespaces:

$ echo $PATH | tr : '\n' | grep java
/home/codespace/.java/current/bin
/usr/local/sdkman/candidates/java/current/bin

In a devcontainer created locally (just with default settings for Java):

$ echo $PATH | tr : '\n' | grep java
/usr/local/sdkman/candidates/java/current/bin
/usr/local/sdkman/candidates/java/current/bin

The net result is that if you sdk install java xxx and sdk use java xxx it isn't actually the default java because of the way the PATH is set up in the codespace.

Add usage note to README

Currently the README addresses questions like customizing your own Dockerfile and adding features.

It would be nice to address, or link to, a guide explaining how to make use of the devcontainers in this repo.

For example, the other repo https://github.com/devcontainers/features currently features such helpful notes as an actual dev container.json file you can actually copy paste into your project to use a devcontainer and a feature.

base-debian image installs ms-dotnettools.csharp vscode extension

The base-debian image references the ms-dotnettools.csharp extension, which is then inherited to all derived images.
Is it okay to remove this extension in src/base-debian/.devcontainer/devcontainer.json?

"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-dotnettools.csharp"
]
}
},

It is aready properly added in src/dotnet/.devcontainer/devcontainer.json

JAVA_HOME points to sdkman jdk home instead of microsoft Java home

Migrated from microsoft/vscode-dev-containers#1646

//cc @samruddhikhandale


@dashorst said

  • VSCode Version: Version: 1.71.2 (Universal) Commit: 74b1f979648cc44d385a2286793c226e611f59e7
  • Local OS Version: macOS Monterrey 12.6
  • Local chip architecture: Apple Silicon
  • Reproduces in: Remote - Containers
  • Name of Dev Container Definition with Issue: Java (no qualifiers)

The devcontainer.json points to this URL:
https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/java

The Dockerfile points to this parent container:

ARG VARIANT="17-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT}

Steps to Reproduce:

  1. add remote container files to project
  2. select java
  3. select maven (no node or gradle)
  4. select java 17 (bullseye)
  5. no other extensions
  6. start mvn in the terminal
  7. get error that JAVA_HOME is invalid
$ mvn help:help
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.

JAVA_HOME points to this:

$ echo $JAVA_HOME
/usr/local/sdkman/candidates/java/current

However when I run java --version:

$ java --version
openjdk 17.0.4.1 2022-08-12 LTS
OpenJDK Runtime Environment Microsoft-40354 (build 17.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Microsoft-40354 (build 17.0.4.1+1-LTS, mixed mode)

And look where it gets its cup of Java from:

$ which java
/usr/lib/jvm/msopenjdk-current/bin/java

This says to me that the configuration of the Java image is not correct.

Literally a week ago this worked without any problems.


@Danielv123 said

I had the same issue with java 11, added the following to .devcontainer.json to fix it.

	"containerEnv": {
		"JAVA_HOME": "/usr/lib/jvm/msopenjdk-current"
	}

@nielspardon said

It seems JAVA_HOME is still correctly set in the following container image tags: 0.205.4-${VARIANT}. If you change your Dockerfile in the following way it should work properly again:

-FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT}
+FROM mcr.microsoft.com/vscode/devcontainers/java:0.205.4-${VARIANT}

Just adding the manual JAVA_HOME env variable was not enough for me since VS Code could not communicate with the Gradle server properly.

@joshspicer since you are the one who last touched containers/java/definition-manifest.json can you help to get this fixed or find the right person who can fix this?


@samruddhikhandale Given the above comment - it looks like this is a problem with the updated image since 0.205.5 is when it switched. Can you take a look?

[Tracking] Image support, deprecation / EOL dates

The following are release dates and EOL / end of support dates for languages / OS's with pre-built images. After runtime or OS support for a given image has ended, we will stop building images for that version. We also typically only release images for "LTS" or "stable" releases of runtimes/OS's. Others can be built from the Dockerfiles available for each image in the source code in this repository.

Releases typically happen monthly, in the final week of one month or first week of the next, and include the most recent changes from the upstream base image or runtime version, including security updates (e.g. the latest OS updates and the latest point release of a runtime or platform). We may update earlier if a critical issue or bug is discovered.

Dev container images are also versioned independent of the runtime. To avoid unexpected breaks, we recommend pinning to the latest major version of an image release to pick up security and feature updates without breaking changes. This image version number is a prefix to the variant or runtime version, e.g. mcr.microsoft.com/devcontainers/typescript-node:0-14 where 0 is the major version number of the dev container image.

To make pinning to a version easier if you wish to do so, recent versions of images include a devcontainer-info command that will output information about the image in use including version information and a link to a file with additional information on contents.

Note: In some cases, we may have to end support earlier than the stated date below if there are fundamental OS requirements that force it or if the primary extension(s) supporting it have dropped support. Our expectation is that this should be rare given typical GA to EOL timelines and is something we strive to avoid.

Language / OS Version Release EOL / End of Support Image
Alpine 3.13 Jan 14th, 2021 Nov 1st, 2022 mcr.microsoft.com/devcontainers/base:alpine-3.13
Alpine 3.14 June 15th, 2021 May 1st, 2023 mcr.microsoft.com/devcontainers/base:alpine-3.14
Alpine 3.15 Nov 24th, 2021 Nov 1st, 2023 mcr.microsoft.com/devcontainers/base:alpine-3.15
Alpine 3.16 May 23rd, 2022 May 23rd, 2024 mcr.microsoft.com/devcontainers/base:alpine-3.16
Alpine 3.17 Nov 22nd 2022 Nov 22nd 2024 mcr.microsoft.com/devcontainers/base:alpine-3.17
Alpine 3.18 May 2023 May 2025 (Est) mcr.microsoft.com/devcontainers/base:alpine-3.18
Alpine 3.19 Dec 07, 2023 Nov 2025 (Est) mcr.microsoft.com/devcontainers/base:alpine-3.19
Alpine 3.20 May 2024 (Est)
Debian (and C++) 10 / Buster July 6, 2019 June 1st, 2024 mcr.microsoft.com/devcontainers/base:buster
mcr.microsoft.com/devcontainers/cpp:buster
Debian (and C++) 11 / Bullseye August 14, 2021 Aug 15th, 2026 mcr.microsoft.com/devcontainers/base:bullseye
mcr.microsoft.com/devcontainers/cpp:bullseye
Debian (and C++) 12 / Bookworm June 10th 2023 June 10, 2028 mcr.microsoft.com/devcontainers/base:bookworm
mcr.microsoft.com/devcontainers/cpp:bookworm
Debian (and C++) 13/ trixie 2025 (Est)
.NET 3.1 Dec 3rd, 2019 Dec 13th, 2022 mcr.microsoft.com/devcontainers/dotnetcore:3.1
mcr.microsoft.com/devcontainers/dotnet:3.1
.NET 6.0 Nov, 2021 Nov 12, 2024 mcr.microsoft.com/devcontainers/dotnet:6.0
.NET 7.0 Nov, 2022 Feb 2025 (Est) mcr.microsoft.com/devcontainers/dotnet:7.0
.NET 8.0 Nov, 2023 Nov 10, 2026 mcr.microsoft.com/devcontainers/dotnet:8.0
.NET 9.0 Nov, 2024
Go 1.18 March 2022 Feb 1st, 2023 mcr.microsoft.com/devcontainers/go:1.18
Go 1.19 August 2022 August 2023 mcr.microsoft.com/devcontainers/go:1.19
Go 1.20 Feb 2023 Feb 2024 (Est) mcr.microsoft.com/devcontainers/go:1.20
Go 1.21 Aug 2023 (Est) Aug 2024 (Est) mcr.microsoft.com/devcontainers/go:1.21
Go 1.22 Feb 2024 Feb 2025 (Est) mcr.microsoft.com/devcontainers/go:1.22
Go 1.23 Aug 2024 (Est)
Java 8 March 2014 December 2030 mcr.microsoft.com/devcontainers/java:8
Java 11 Sept 2018 Sept 2026 mcr.microsoft.com/devcontainers/java:11
Java 17 Sept 2021 Sept 2029 mcr.microsoft.com/devcontainers/java:17
Java 21 Sept 19, 2023 September 2031 mcr.microsoft.com/devcontainers/java:21
Node.js 14 April, 2020 April 30th, 2023 mcr.microsoft.com/devcontainers/javascript-node:14
mcr.microsoft.com/devcontainers/typescript-node:14
Node.js 16 April 20, 2021 Sept 11, 2023 mcr.microsoft.com/devcontainers/javascript-node:16
mcr.microsoft.com/devcontainers/typescript-node:16
Node.js 18 April, 2022 April, 2025 mcr.microsoft.com/devcontainers/javascript-node:18
mcr.microsoft.com/devcontainers/typescript-node:18
Node.js 20 April 18, 2023 April, 2026 mcr.microsoft.com/devcontainers/javascript-node:20
mcr.microsoft.com/devcontainers/typescript-node:20
Node.js 22 April, 2024 (Est)
PHP 7.4 Nov 28th, 2019 Nov 28th, 2022 (EOL Nov/Dec 2021) mcr.microsoft.com/devcontainers/php:7.4
PHP 8.0 Nov 26th, 2020 Nov 26 2022 (EOL Nov 26th, 2023) mcr.microsoft.com/devcontainers/php:8.0
PHP 8.1 Nov 25th, 2021 Nov 25th, 2023 (EOL Nov 25th, 2024) mcr.microsoft.com/devcontainers/php:8.1
PHP 8.2 Dec 8th 2022 Dec 8th, 2024 (EOL Dec 8th, 2025) mcr.microsoft.com/devcontainers/php:8.2
PHP 8.3 Nov 2023 (Est) mcr.microsoft.com/devcontainers/php:8.3
Python 3.7 June 27th, 2018 June 27th, 2023 mcr.microsoft.com/devcontainers/python:3.7
Python 3.8 Oct 10th, 2019 Oct, 2024 mcr.microsoft.com/devcontainers/python:3.8
Python 3.9 Oct 5th, 2020 Oct, 2025 (Est) mcr.microsoft.com/devcontainers/python:3.9
Python 3.10 Oct 5th, 2021 Oct, 2026 mcr.microsoft.com/devcontainers/python:3.10
Python 3.11 Oct 25th, 2022 Oct, 2027 mcr.microsoft.com/devcontainers/python:3.11
Python 3.12 Oct, 2023 Oct, 2028 mcr.microsoft.com/devcontainers/python:3.12
Python 3.13 Oct, 2024 (Est)
Ruby 3.0 Dec 25th, 2020 March 2024 (Est) mcr.microsoft.com/devcontainers/ruby:3.0
Ruby 3.1 Dec 25th, 2021 March 2025 (Est) mcr.microsoft.com/devcontainers/ruby:3.1
Ruby 3.2 Dec 25th, 2022 March 2026 mcr.microsoft.com/devcontainers/ruby:3.2
Ruby 3.3 Dec 25th, 2023 (Est) March 2027 mcr.microsoft.com/devcontainers/ruby:3.3
Ruby 3.4 Dec 25th, 2024 (Est) March 2027
Ubuntu (and C++) 18.04 LTS / Bionic April 26, 2018 April, 2028 (EOSS May, 2023) mcr.microsoft.com/devcontainers/base:bionic
mcr.microsoft.com/devcontainers/cpp:bionic
Ubuntu (and C++) 20.04 LTS / Focal April, 2020 EOSS April, 2025 (est) mcr.microsoft.com/devcontainers/base:focal
mcr.microsoft.com/devcontainers/cpp:focal
mcr.microsoft.com/devcontainers/universal:focal
Ubuntu (and C++) 22.04 LTS April, 2022 EOSS April, 2027 (est) mcr.microsoft.com/devcontainers/base:jammy
mcr.microsoft.com/devcontainers/cpp:jammy
Ubuntu (and C++) 24.04 LTS April, 2024 (Est)

Rust (mcr.microsoft.com/devcontainers/rust), Anaconda (mcr.microsoft.com/devcontainers/anaconda), Miniconda (mcr.microsoft.com/devcontainers/miniconda), and Jekyll (mcr.microsoft.com/devcontainers/jekyll) have an ongoing release schedule, so we are continually releasing the latest stable version. The Jekyll image also includes the github-pages gem for Jekyll 3.x.

Changing non-root user name from 'vscode' to something more general

Hello,
I was just curious if there were any plans to change the name of the non-root user in images from being 'vscode' to something more general given the move away from being part of vscode.

While I recognize it would probably be a fairly major breaking change, I feel like it would be the right move going forward.

Thanks!

Gradle Build Does Not Work

Gradle testing on a new Java codespace does not work. This failure happened in a repository where gradle previously functioned fine, so I assume that some aspect of the default codespace configuration changed. Here are some details.

Running gradle test produces this error:

Starting a Gradle Daemon (subsequent builds will be faster)

FAILURE: Build failed with an exception.

* What went wrong:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/7.6/userguide/gradle_daemon.html
Process command line: /opt/java/11.0.14/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /usr/local/sdkman/candidates/gradle/7.6/lib/gradle-launcher-7.6.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.6
Please read the following process output to find out more:
-----------------------

FAILURE: Build failed with an exception.

* What went wrong:
Could not create service of type ClassLoaderRegistry using GlobalScopeServices.createClassLoaderRegistry().

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
org.gradle.internal.service.ServiceCreationException: Could not create service of type ClassLoaderRegistry using GlobalScopeServices.createClassLoaderRegistry().
        at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:901)
        at org.gradle.internal.service.DefaultServiceRegistry$FactoryService.createServiceInstance(DefaultServiceRegistry.java:826)
        at org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectServiceProvider.getInstance(DefaultServiceRegistry.java:611)
        at org.gradle.internal.service.DefaultServiceRegistry$SingletonService.get(DefaultServiceRegistry.java:674)
        at org.gradle.internal.service.DefaultServiceRegistry.applyConfigureMethod(DefaultServiceRegistry.java:199)
        at org.gradle.internal.service.DefaultServiceRegistry.findProviderMethods(DefaultServiceRegistry.java:181)
        at org.gradle.internal.service.DefaultServiceRegistry.addProvider(DefaultServiceRegistry.java:265)
        at org.gradle.launcher.daemon.server.DaemonServices.<init>(DaemonServices.java:86)
        at org.gradle.launcher.daemon.bootstrap.DaemonMain.doAction(DaemonMain.java:112)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:50)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
        at org.gradle.launcher.daemon.bootstrap.GradleDaemon.main(GradleDaemon.java:22)
Caused by: java.lang.IllegalArgumentException: Cannot find JAR 'jsoup-1.15.1.jar' required by module 'gradle-resources-http' using classpath or distribution directory '/usr/local/sdkman/candidates/gradle/7.6'
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.findDependencyJar(DefaultModuleRegistry.java:358)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.findDependencyJars(DefaultModuleRegistry.java:220)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.module(DefaultModuleRegistry.java:210)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.loadOptionalModule(DefaultModuleRegistry.java:190)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.loadModule(DefaultModuleRegistry.java:174)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.getModule(DefaultModuleRegistry.java:154)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.getModules(DefaultModuleRegistry.java:228)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry.access$100(DefaultModuleRegistry.java:50)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry$DefaultModule.getRequiredModules(DefaultModuleRegistry.java:393)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry$DefaultModule.collectRequiredModules(DefaultModuleRegistry.java:431)
        at org.gradle.api.internal.classpath.DefaultModuleRegistry$DefaultModule.getAllRequiredModules(DefaultModuleRegistry.java:414)
        at org.gradle.api.internal.DynamicModulesClassPathProvider.allRequiredModulesOf(DynamicModulesClassPathProvider.java:96)
        at org.gradle.api.internal.DynamicModulesClassPathProvider.gradleExtensionsWithout(DynamicModulesClassPathProvider.java:65)
        at org.gradle.api.internal.DynamicModulesClassPathProvider.findClassPath(DynamicModulesClassPathProvider.java:51)
        at org.gradle.api.internal.DefaultClassPathRegistry.getClassPath(DefaultClassPathRegistry.java:35)
        at org.gradle.initialization.DefaultClassLoaderRegistry.<init>(DefaultClassLoaderRegistry.java:35)
        at org.gradle.internal.service.scopes.GlobalScopeServices.createClassLoaderRegistry(GlobalScopeServices.java:296)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
        at org.gradle.internal.service.ReflectionBasedServiceMethod.invoke(ReflectionBasedServiceMethod.java:34)
        at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:899)
        ... 16 more


* Get more help at https://help.gradle.org


* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Basically, it seems that gradle is looking for Java in the wrong place, but Java does run and successfully compile my code.

Here is the gradle --version:

------------------------------------------------------------
Gradle 7.6
------------------------------------------------------------

Build time:   2022-11-25 13:35:10 UTC
Revision:     daece9dbc5b79370cc8e4fd6fe4b2cd400e150a8

Kotlin:       1.7.10
Groovy:       3.0.13
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          11.0.14.1 (Microsoft 11.0.14.1+1-LTS)
OS:           Linux 5.4.0-1098-azure amd64

And the java --version:

openjdk 11.0.14.1 2022-02-08 LTS
OpenJDK Runtime Environment Microsoft-31205 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM Microsoft-31205 (build 11.0.14.1+1-LTS, mixed mode)

Also, I don't know if there is actually a connection, but I had other issues getting gradle builds to work in Java before:
https://github.com/orgs/community/discussions/37051

Java is missing from mcr.microsoft.com/vscode/devcontainers/java:0.205.18-11

The Java image mcr.microsoft.com/vscode/devcontainers/java:0.205.18-11 is not containing Java.

Can be tested with the following commands:

docker run --rm mcr.microsoft.com/vscode/devcontainers/java:0.205.18-11 java --version : "java": executable file not found in $PATH: unknown.

docker run --rm mcr.microsoft.com/vscode/devcontainers/java:0.205.17-11 java --version : openjdk 11.0.17 2022-10-18 LTS

I had a look at the history of the Java folder but did not really find anything relevant... https://github.com/devcontainers/images/commits/main/src/java

جوجل

ما هوالرمز الترويجي

Images not listed on mcr.microsoft.com

I browsed and searched on mcr.microsoft.com to try to figure out what images are available, and I couldn't find any evidence of these images being listed there. Maybe I just browsed/searched poorly, but none of the obvious keywords worked.

I'm specifically trying to figure out what tags are available for:

mcr.microsoft.com/vscode/devcontainers/base

I did figure out how to find the tag for the languages here, like mcr.microsoft.com/devcontainers/python, by navigating through the src folder and clicking the link in the readme, but I think mcr.microsoft.com is the more obvious place to look for that info.

Thanks!

<!-- Policy app identification https://img.shields.io/static/v1?label=ContributorLicenseAgreement. -->

          <!-- Policy app identification https://img.shields.io/static/v1?label=ContributorLicenseAgreement. -->

@NPNG-ON-GOD please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{npng}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
Contributor License Agreement

Contribution License Agreement

This Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
and conveys certain license rights to Microsoft Corporation and its affiliates (“Microsoft”) for Your
contributions to Microsoft open source projects. This Agreement is effective as of the latest signature
date below.

  1. Definitions.
    “Code” means the computer software code, whether in human-readable or machine-executable form,
    that is delivered by You to Microsoft under this Agreement.
    “Project” means any of the projects owned or managed by Microsoft and offered under a license
    approved by the Open Source Initiative (www.opensource.org).
    “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any
    Project, including but not limited to communication on electronic mailing lists, source code control
    systems, and issue tracking systems that are managed by, or on behalf of, the Project for the purpose of
    discussing and improving that Project, but excluding communication that is conspicuously marked or
    otherwise designated in writing by You as “Not a Submission.”
    “Submission” means the Code and any other copyrightable material Submitted by You, including any
    associated comments and documentation.
  2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any
    Project. This Agreement covers any and all Submissions that You, now or in the future (except as
    described in Section 4 below), Submit to any Project.
  3. Originality of Work. You represent that each of Your Submissions is entirely Your original work.
    Should You wish to Submit materials that are not Your original work, You may Submit them separately
    to the Project if You (a) retain all copyright and license information that was in the materials as You
    received them, (b) in the description accompanying Your Submission, include the phrase “Submission
    containing materials of a third party:” followed by the names of the third party and any licenses or other
    restrictions of which You are aware, and (c) follow any other instructions in the Project’s written
    guidelines concerning Submissions.
  4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else
    for whom You are acting in making Your Submission, e.g. as a contractor, vendor, or agent. If Your
    Submission is made in the course of Your work for an employer or Your employer has intellectual
    property rights in Your Submission by contract or applicable law, You must secure permission from Your
    employer to make the Submission before signing this Agreement. In that case, the term “You” in this
    Agreement will refer to You and the employer collectively. If You change employers in the future and
    desire to Submit additional Submissions for the new employer, then You agree to sign a new Agreement
    and secure permission from the new employer before Submitting those Submissions.
  5. Licenses.
  • Copyright License. You grant Microsoft, and those who receive the Submission directly or
    indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license in the
    Submission to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute
    the Submission and such derivative works, and to sublicense any or all of the foregoing rights to third
    parties.
  • Patent License. You grant Microsoft, and those who receive the Submission directly or
    indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license under
    Your patent claims that are necessarily infringed by the Submission or the combination of the
    Submission with the Project to which it was Submitted to make, have made, use, offer to sell, sell and
    import or otherwise dispose of the Submission alone or with the Project.
  • Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement.
    No additional licenses or rights whatsoever (including, without limitation, any implied licenses) are
    granted by implication, exhaustion, estoppel or otherwise.
  1. Representations and Warranties. You represent that You are legally entitled to grant the above
    licenses. You represent that each of Your Submissions is entirely Your original work (except as You may
    have disclosed under Section 3). You represent that You have secured permission from Your employer to
    make the Submission in cases where Your Submission is made in the course of Your work for Your
    employer or Your employer has intellectual property rights in Your Submission by contract or applicable
    law. If You are signing this Agreement on behalf of Your employer, You represent and warrant that You
    have the necessary authority to bind the listed employer to the obligations contained in this Agreement.
    You are not expected to provide support for Your Submission, unless You choose to do so. UNLESS
    REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, AND EXCEPT FOR THE WARRANTIES
    EXPRESSLY STATED IN SECTIONS 3, 4, AND 6, THE SUBMISSION PROVIDED UNDER THIS AGREEMENT IS
    PROVIDED WITHOUT WARRANTY OF ANY KIND, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY OF
    NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
  2. Notice to Microsoft. You agree to notify Microsoft in writing of any facts or circumstances of which
    You later become aware that would make Your representations in this Agreement inaccurate in any
    respect.
  3. Information about Submissions. You agree that contributions to Projects and information about
    contributions may be maintained indefinitely and disclosed publicly, including Your name and other
    information that You submit with Your Submission.
  4. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and
    the parties consent to exclusive jurisdiction and venue in the federal courts sitting in King County,
    Washington, unless no federal subject matter jurisdiction exists, in which case the parties consent to
    exclusive jurisdiction and venue in the Superior Court of King County, Washington. The parties waive all
    defenses of lack of personal jurisdiction and forum non-conveniens.
  5. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and
    supersedes any and all prior agreements, understandings or communications, written or oral, between
    the parties relating to the subject matter hereof. This Agreement may be assigned by Microsoft.

Originally posted by @microsoft-github-policy-service[bot] in #326 (comment)

building micro/patch versions

Hello,

I am wondering if there is a way to build a devcontainer using a specific micro/patch version. Heroku deployments require specifying the patch number, at least for python, and devcontainer seems to pull the latest, which can cause the dev container to become out of sync with the repo. I'm wondering if there is a way to override this, maybe with a dockerfile ARG? Apologies if i am missing something obvious.

No Ubuntu images found

Hello, I am working an app that was using base:0-focal, but it seems that when creating the dev-container in VS the image is no longer found.
I have checked the list of available tags from the README and used docker inspect --type image (docker inspect --type image mcr.microsoft.com/devcontainers/base:0.203.0-focal) for all the focal, bionic and ubuntu20.04 versions and only 0.201.7-ubuntu20.04 was available.
Has somebody else had this issue? How can I solve it?

Question: What determines which extensions are included

I was running the following devcontainer.json:

{
	"image": "mcr.microsoft.com/devcontainers/python:3.11",
	"customizations": {
		"vscode": {
			"extensions": [
			]
		}
	}
}

I am not specifying any extensions, however in the vscode container remote extensions I see the following are installed:

  1. ESLint
  2. isort
  3. Jupyter
  4. Jupyter Cell Tags
  5. Jupyter Notebook Renderers
  6. Jupyter Slide Show
  7. Jupyter Keymap
  8. Python

I am assuming that the image mcr.microsoft.com/devcontainers/python:3.11 ships these extensions. I was just after a little more information on where these come from.

Update Rust image

Rust 1.65 came out almost two weeks ago but the Rust image is still stuck on 1.64.

This is really inconvenient, as Rust cannot be upgraded by just doing rustup update like on a regular install.

`vscode` user doesn't have permissions to the `.vscode-remote` folder

The vscode user doesn't have permissions to the .vscode-remote folder which causes a bunch of issue with VSCode extensions.

See

I tried with and without

"remoteUser": "vscode"

But both seems to have issues.

I'm seeing stuff like this

[renderer4] [error] ENOENT: no such file or directory, open '/home/vscode/.vscode-remote/data/User/workspaceStorage/115d3bbf190e55f88d444089e54b0ca3/redhat.java/jdt_ws/.metadata/.log': Error: ENOENT: no such file or directory, open '/home/vscode/.vscode-remote/data/User/workspaceStorage/115d3bbf190e55f88d444089e54b0ca3/redhat.java/jdt_ws/.metadata/.log'

[renderer4] [error] Error: EPERM: operation not permitted, copyfile '/workspaces/openapi-generator/.devcontainer/devcontainer.json' -> '/home/vscode/.vscode-remote/data/User/History/c4cefaa/vwnA.json': NoPermissions (FileSystemError): Error: EPERM: operation not permitted, copyfile '/workspaces/openapi-generator/.devcontainer/devcontainer.json' -> '/home/vscode/.vscode-remote/data/User/History/c4cefaa/vwnA.json'
    at u (/vscode/bin/linux-x64/64bbfbf67ada9953918d72e1df2f4d8e537d340e/out/vs/server/node/server.main.js:82:38982)
    at r.toFileSystemProviderError (/vscode/bin/linux-x64/64bbfbf67ada9953918d72e1df2f4d8e537d340e/out/vs/server/node/server.main.js:87:44997)
    at r.doCloneFile (/vscode/bin/linux-x64/64bbfbf67ada9953918d72e1df2f4d8e537d340e/out/vs/server/node/server.main.js:87:44246)

and this one is plain weird. Why does it try to access my local VSCode? I don't have the java extension installed locally, only in the codepsaces

[renderer4] [error] [Extension Host] Error: command 'java.execute.workspaceCommand' not found
    at S._tryExecuteCommand (vscode-file://vscode-app/c:/Program%20Files/Microsoft%20VS%20Code/resources/app/out/vs/workbench/workbench.desktop.main.js:1715:3532)
    at S.executeCommand (vscode-file://vscode-app/c:/Program%20Files/Microsoft%20VS%20Code/resources/app/out/vs/workbench/workbench.desktop.main.js:1715:3414)

No apache log available ( php image)

Just noticed while trying to debug mod_rewrite.
MY configuration is copied by https://github.com/devcontainers/images/blob/main/src/php/.devcontainer/devcontainer.json with the following overrides:

................
	"postCreateCommand": "sudo chmod a+x \"$(pwd)\" && sudo rm -rf /var/www/html && sudo ln -s \"$(pwd)\" /var/www/html && sudo sed -i '1i ServerName localhost' /etc/apache2/apache2.conf && sudo sed -i 's/LogLevel warn/LogLevel alert rewrite:trace6/' /etc/apache2/apache2.conf && sudo mv \\/etc\\/apache2\\/mods-available\\/rewrite.load \\/etc\\/apache2\\/mods-enabled\\/rewrite.load && apachectl start"

	"remoteUser": "vscode",
	"workspaceMount": "source=(localdir)/src,target=/workspace,type=bind",
	"workspaceFolder": "/workspace"
................

whatever the curled url - container logs just container started.
Any issue with my configuration?
Thanks

LICENSE? (CC BY 4.0 or MIT? )

Is there a discrepancy between the LICENSE file and the README description?

images/README.md

Lines 46 to 49 in 017b8e6

License for this repository:
Copyright © Microsoft Corporation All rights reserved.<br />
Creative Commons Attribution 4.0 License (International): https://creativecommons.org/licenses/by/4.0/legalcode

images/LICENSE

Lines 1 to 3 in 017b8e6

MIT License
Copyright (c) Microsoft Corporation. All rights reserved.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.