devcontainers / devcontainers/spec

Integrate with run mount mechanism to improve feature configuration abilities

Open
#450 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
5.7k
Forks
496
PR merge metrics
No merged PRs in 30d

Description

# Description

Similar to #345, this proposal seeks to integrate with the Dockerfile Spec's [`RUN --mount` ability](https://docs.docker.com/reference/dockerfile/#run---mount). In this case, I'm proposing additionally exposing the ability to use `bind` mounts during container build, either fully configurable as in #345, or at minimum just mounting in the whole `.devcontainer` directory.

Motivation
I'm working on a project to create an Azure IoT device, and part of that includes setting up communication between the code under test and the IoT Hub. For various testing reasons, it can be advantageous to perform all activities locally, cutting out the need for developers to register their computers with the actual Azure hub. This is only possible because the remote hub is an MQTT/AMQP broker, so running a replacement broker in a second container is viable (in my case, Mosquitto).

The problem is that one of the things I want to test with my code is endpoint identity setup with certificate/chains, and for patently obvious reasons don't want to put a certificate into my code repository - I create them during container initialization, currently as a `postCreateCommand` shell script.
Unfortunately, this is actually _too late_ in the process for the Mosquitto container (which accesses the certificates via a shared volume and fails to start because the certificates aren't created yet), and means that after initial devcontainer build the developer must restart their container. Creating the certificates as a devcontainer-feature would (likely? need to test) create them early enough, but I want to be able to generalize the solution for future projects (and likely make it public), so that means I need a way to configure the certificates/chains that get created (for example, by specifying an `openssl.conf`). And while stuffing entire file contents into a string variable is possible, it's not very user-friendly....

Proposed Solution
At minimum, either default bind-mounting the `.devcontainer` directory or providing a toggle to do so would allow end-users to specify additional configuration files for cases like this. Allowing features to be able to specify a build bind mount is also possible, but somewhat less interesting...
```json
{
"build": {
"mounts": [
{"type": "bind", "id": "devcontainer", "source": "${localWorkspaceFolder}", "target": "/some/path", "readonly": "true" }
]
}
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.