mirror of https://github.com/docker/docs.git
DD4L: Document file sharing implementation (#15264)
Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Co-authored-by: Frédéric Dalleau <79831213+fredericdalleau@users.noreply.github.com> Signed-off-by: Piotr Stankiewicz <piotr.stankiewicz@docker.com> Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Co-authored-by: Frédéric Dalleau <79831213+fredericdalleau@users.noreply.github.com>
This commit is contained in:
parent
90b8f0249e
commit
cd1dec6a18
|
@ -31,6 +31,8 @@ To install Docker Desktop successfully, your Linux host must meet the following
|
||||||
|
|
||||||
- At least 4 GB of RAM.
|
- At least 4 GB of RAM.
|
||||||
|
|
||||||
|
- Enable configuring ID mapping in user namespaces, see [File sharing](#file-sharing).
|
||||||
|
|
||||||
Docker Desktop for Linux runs a Virtual Machine (VM). For more information on why, see [Why Docker Desktop for Linux runs a VM](linux-install.md#why-docker-desktop-for-linux-runs-a-vm).
|
Docker Desktop for Linux runs a Virtual Machine (VM). For more information on why, see [Why Docker Desktop for Linux runs a VM](linux-install.md#why-docker-desktop-for-linux-runs-a-vm).
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
|
@ -267,6 +269,58 @@ Docker Desktop for Linux runs a Virtual Machine (VM) for the following reasons:
|
||||||
|
|
||||||
As such, we have adjusted the default memory available to the VM in DD4L. You can tweak this setting to your specific needs by using the **Memory** slider within the **Settings** > **Resources** tab of Docker Desktop.
|
As such, we have adjusted the default memory available to the VM in DD4L. You can tweak this setting to your specific needs by using the **Memory** slider within the **Settings** > **Resources** tab of Docker Desktop.
|
||||||
|
|
||||||
|
## File sharing
|
||||||
|
|
||||||
|
Docker Desktop for Linux uses [virtiofs](https://virtio-fs.gitlab.io/){:target="_blank" rel="noopener"}{:target="_blank" rel="noopener"} as the
|
||||||
|
default (and currently only) mechanism to enable file sharing between the host
|
||||||
|
and Docker Desktop VM. In order not to require elevated privileges, without
|
||||||
|
unnecessarily restricting operations on the shared files, Docker Desktop runs
|
||||||
|
the file sharing service (`virtiofsd`) inside a user namespace (see
|
||||||
|
`user_namespaces(7)`) with UID and GID mapping configured. As a result Docker
|
||||||
|
Desktop relies on the host being configured to enable the current user to use
|
||||||
|
subordinate ID delegation. For this to be true `/etc/subuid` (see `subuid(5)`)
|
||||||
|
and `/etc/subgid` (see `subgid(5)`) must be present. Docker Desktop only
|
||||||
|
supports subordinate ID delegation configured via files. Docker Desktop maps the
|
||||||
|
current user ID and GID to 0 in the containers. It uses the first entry
|
||||||
|
corresponding to the current user in `/etc/subuid` and `/etc/subgid` to set up
|
||||||
|
mappings for IDs above 0 in the containers.
|
||||||
|
|
||||||
|
| ID in container | ID on host |
|
||||||
|
| --------------- | -------------------------------------------------------------------------------- |
|
||||||
|
| 0 (root) | ID of the user running DD (e.g. 1000) |
|
||||||
|
| 1 | 0 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100000) |
|
||||||
|
| 2 | 1 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100001) |
|
||||||
|
| 3 | 2 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100002) |
|
||||||
|
| ... | ... |
|
||||||
|
|
||||||
|
If `/etc/subuid` and `/etc/subgid` are missing, they need to be created.
|
||||||
|
Both should contain entries in the form -
|
||||||
|
`<username>:<start of id range>:<id range size>`. For example, to allow the current user
|
||||||
|
to use IDs from 100000 to 165535:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ grep "$USER" /etc/subuid >> /dev/null 2&>1 || (echo "$USER:100000:65536" | sudo tee -a /etc/subuid)
|
||||||
|
$ grep "$USER" /etc/subgid >> /dev/null 2&>1 || (echo "$USER:100000:65536" | sudo tee -a /etc/subgid)
|
||||||
|
```
|
||||||
|
|
||||||
|
To verify the configs have been created correctly, inspect their contents:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ echo $USER
|
||||||
|
exampleuser
|
||||||
|
$ cat /etc/subuid
|
||||||
|
exampleuser:100000:65536
|
||||||
|
$ cat /etc/subgid
|
||||||
|
exampleuser:100000:65536
|
||||||
|
```
|
||||||
|
|
||||||
|
In this scenario if a shared file is `chown`ed inside a Docker Desktop container
|
||||||
|
owned by a user with a UID of 1000, it shows up on the host as owned by
|
||||||
|
a user with a UID of 100999. This has the unfortunate side effect of preventing
|
||||||
|
easy access to such a file on the host. The problem is resolved by creating
|
||||||
|
a group with the new GID and adding our user to it, or by setting a recursive
|
||||||
|
ACL (see `setfacl(1)`) for folders shared with the Docker Desktop VM.
|
||||||
|
|
||||||
## Where to go next
|
## Where to go next
|
||||||
|
|
||||||
- [Troubleshooting](../troubleshoot/overview.md) describes common problems, workarounds, how to run and submit diagnostics, and submit issues.
|
- [Troubleshooting](../troubleshoot/overview.md) describes common problems, workarounds, how to run and submit diagnostics, and submit issues.
|
||||||
|
|
Loading…
Reference in New Issue