Skip to content

Commit fd1239c

Browse files
committed
ENGDOCS-2324
1 parent aa68ba2 commit fd1239c

File tree

8 files changed

+134
-181
lines changed

8 files changed

+134
-181
lines changed

_vale/Docker/Acronyms.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ exceptions:
1515
- AUFS
1616
- AWS
1717
- BIOS
18+
- BPF
1819
- CI
1920
- CISA
2021
- CLI
@@ -52,6 +53,7 @@ exceptions:
5253
- HTTP
5354
- HTTPS
5455
- IAM
56+
- ID
5557
- IDE
5658
- IP
5759
- JAR
@@ -75,6 +77,7 @@ exceptions:
7577
- PATH
7678
- PDF
7779
- PEM
80+
- PID
7881
- PHP
7982
- POSIX
8083
- POST

_vale/config/vocabularies/Docker/accept.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Apple
55
Artifactory
66
Autotest
77
Azure
8+
Berkely
89
Btrfs
910
BuildKit
1011
BusyBox
@@ -21,6 +22,7 @@ Datadog
2122
Ddosify
2223
Debootstrap
2324
Dev Environments?
25+
Dev
2426
Django
2527
Docker Build Cloud
2628
Docker Business
@@ -71,30 +73,35 @@ Nuxeo
7173
OAuth
7274
OTel
7375
Okta
76+
Paketo
7477
PKG
7578
Postgres
7679
PowerShell
7780
Python
7881
S3
82+
Seccomp
7983
SQLite
8084
Slack
8185
Snyk
8286
Solr
8387
SonarQube
8488
Syft
89+
Sysbox
8590
Sysdig
8691
Testcontainers
8792
Traefik
8893
Ubuntu
8994
Unix
9095
VMware
96+
VM's
9197
Wasm
9298
Windows
9399
WireMock
94100
Zscaler
95101
Zsh
96102
[Aa]utobuild
97103
[Bb]uildx
104+
[Bb]uildpack(s)?
98105
[Cc]odenames?
99106
[Cc]ompose
100107
[Dd]istroless
@@ -109,13 +116,15 @@ Zsh
109116
[Nn]amespace
110117
[Oo]nboarding
111118
[Pp]aravirtualization
119+
[Pp]rocfs
112120
[Pp]roxied
113121
[Pp]roxying
114122
[Rr]eal-time
115123
[Rr]untimes?
116124
[Ss]andbox(ed)?
117125
[Ss]wappable
118126
[Ss]warm
127+
[Ss]ysfs
119128
[Tt]oolchains?
120129
[Vv]irtiofs
121130
[Vv]irtualize
@@ -145,10 +154,12 @@ monorepos?
145154
musl
146155
nameserver
147156
namespace
157+
namespacing
148158
npm
149159
osquery
150160
osxfs
151161
pgAdmin
162+
rootful
152163
runc
153164
snapshotters?
154165
stdin

content/manuals/security/for-admins/hardened-desktop/enhanced-container-isolation/_index.md

Lines changed: 24 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,49 +13,41 @@ weight: 20
1313
>
1414
> Enhanced Container Isolation is available to Docker Business customers only.
1515
16-
Enhanced Container Isolation provides an additional layer of security to prevent malicious workloads running in containers from compromising Docker Desktop or the host.
16+
Enhanced Container Isolation (ECI) provides an additional layer of security to prevent malicious workloads running in containers from compromising Docker Desktop or the host.
1717

18-
It uses a variety of advanced techniques to harden container isolation, but without impacting developer productivity. It is available with [Docker Desktop 4.13.0 and later](/manuals/desktop/release-notes.md).
18+
It uses a variety of advanced techniques to harden container isolation, but without impacting developer productivity.
1919

20-
These techniques include:
21-
- Running all containers unprivileged through the Linux user-namespace, even those launched with the `--privileged` flag. This makes it harder for malicious container workloads to escape the container and infect the Docker Desktop VM and host.
22-
- Ensuring Docker Desktop VM immutability (e.g., its internal settings can't be modified by containers or users).
23-
- Vetting some critical system calls to prevent container escapes, and partially virtualizing portions of `/proc` and `/sys` inside the container for further isolation.
24-
- Preventing user console access to the Docker Desktop VM.
25-
26-
When Enhanced Container Isolation is enabled, these mechanisms are applied automatically and with minimal functional or performance impact to developers. Developers continue to use Docker Desktop as usual, but the containers they launch are more strongly isolated.
27-
28-
Enhanced Container Isolation ensures stronger container isolation and also locks in any security configurations that have been created by IT admins, for instance through [Registry Access Management policies](/manuals/security/for-admins/hardened-desktop/registry-access-management.md) or with [Settings Management](../settings-management/_index.md).
20+
Enhanced Container Isolation ensures stronger container isolation and also locks in any security configurations that have been created by administrators, for instance through [Registry Access Management policies](/manuals/security/for-admins/hardened-desktop/registry-access-management.md) or with [Settings Management](../settings-management/_index.md).
2921

3022
> [!NOTE]
3123
>
32-
> Enhanced Container Isolation is in addition to other container security techniques used by Docker. For example, reduced Linux Capabilities, Seccomp, AppArmor.
24+
> ECI is in addition to other container security techniques used by Docker. For example, reduced Linux Capabilities, Seccomp, AppArmor.
3325
34-
### Who is it for?
26+
## Who is it for?
3527

3628
- For organizations and developers that want to prevent container attacks and reduce vulnerabilities in developer environments.
3729
- For organizations that want to ensure stronger container isolation that is easy and intuitive to implement on developers' machines.
3830

39-
### What happens when Enhanced Container Isolation is turned on?
31+
## What happens when Enhanced Container Isolation is turned on?
4032

41-
When Enhanced Container Isolation is turned on, the following features are enabled:
33+
When Enhanced Container Isolation is turned on, the following features and security techniques are enabled:
4234

43-
- All user containers are automatically run in Linux User Namespaces which ensures stronger isolation. Each container runs in a dedicated Linux user-namespace.
35+
- All user containers are automatically run in Linux user namespaces which ensures stronger isolation. Each container runs in a dedicated Linux user-namespace.
4436
- The root user in the container maps to an unprivileged user inside the Docker Desktop Linux VM.
45-
- Containers become harder to breach. For example, sensitive system calls are vetted and portions of `/proc` and `/sys` are emulated.
37+
- Containers become harder to breach. For example, sensitive system calls are vetted and portions of `/proc` and `/sys` are emulated inside the container.
4638
- Users can continue using containers as usual, including bind mounting host directories, volumes, etc.
4739
- No change in the way developers run containers, and no special container images are required.
48-
- Privileged containers (e.g., `--privileged` flag) work, but they are only privileged within the container's Linux User Namespace, not in the Docker Desktop VM. Therefore they can't be used to breach the Docker Desktop VM.
40+
- Privileged containers (e.g., `--privileged` flag) work, but they are only privileged within the container's Linux user namespace, not in the Docker Desktop VM. Therefore they can't be used to breach the Docker Desktop VM.
4941
- Docker-in-Docker and even Kubernetes-in-Docker works, but run unprivileged inside the Docker Desktop Linux VM.
5042

5143
In addition, the following restrictions are imposed:
5244

5345
- Containers can no longer share namespaces with the Docker Desktop VM (e.g., `--network=host`, `--pid=host` are disallowed).
5446
- Containers can no longer modify configuration files inside the Docker Desktop VM (e.g., mounting any VM directory into the container is disallowed).
55-
- Containers can no longer access the Docker engine (e.g., mounting the Docker engine's socket into the container is restricted); this prevents malicious containers from gaining control of the Docker engine. Admins can relax this for [trusted container images](config.md).
47+
- Containers can no longer access the Docker Engine. For example, mounting the Docker Engine's socket into the container is restricted which prevents malicious containers from gaining control of the Docker Engine. Administrators can relax this for [trusted container images](config.md).
5648
- Console access to the Docker Desktop VM is forbidden for all users.
5749

58-
These features and restrictions ensure that containers are better secured at runtime, with minimal impact to developer experience and productivity.
50+
These features and restrictions ensure that containers are better secured at runtime, with minimal impact to developer experience and productivity. Developers can continue to use Docker Desktop as usual, but the containers they launch are more strongly isolated.
5951

6052
For more information on how Enhanced Container Isolation work, see [How does it work](how-eci-works.md).
6153

@@ -65,20 +57,9 @@ For more information on how Enhanced Container Isolation work, see [How does it
6557
> Kubernetes pods and Extension containers. For more information on known
6658
> limitations and workarounds, see [FAQs](faq.md).
6759
68-
### What host OSes / platforms is Enhanced Container Isolation supported on?
69-
70-
Enhanced Container Isolation (ECI) was introduced in Docker Desktop 4.13, for all platforms (Windows, Mac, and Linux).
71-
72-
For Windows hosts, ECI works with both the Docker Desktop Hyper-V and WSL 2 backends, as follows:
60+
## How do I enable Enhanced Container Isolation?
7361

74-
- Docker Desktop 4.19 or prior: ECI only works with Hyper-V.
75-
- Docker Desktop 4.20 or later: ECI Works with both Hyper-V and WSL 2 (with WSL version 1.1.3.0 and above).
76-
77-
See [ECI Support for WSL](limitations.md#eci-support-for-wsl) for further info as well as security caveats when using Enhanced Container Isolation on WSL 2.
78-
79-
### How do I enable Enhanced Container Isolation?
80-
81-
#### As a developer
62+
### As a developer
8263

8364
To enable Enhanced Container Isolation as a developer:
8465
1. Ensure your organization has a Docker Business subscription.
@@ -92,19 +73,13 @@ To enable Enhanced Container Isolation as a developer:
9273
>
9374
> Enhanced Container Isolation does not protect containers created prior to enabling ECI. For more information on known limitations and workarounds, see [FAQs](faq.md).
9475
95-
#### As an admin
96-
97-
##### Prerequisite
76+
### As an administrator
9877

99-
To enable Enhanced Container Isolation as an admin, you first need to [enforce
100-
sign-in](/manuals/security/for-admins/enforce-sign-in/_index.md). This is
101-
because the Enhanced Container Isolation feature requires a Docker Business
102-
subscription and therefore your Docker Desktop users must authenticate to your
103-
organization for this configuration to take effect.
78+
#### Prerequisite
10479

105-
Enforcing sign-in ensures that your Docker Desktop developers always authenticate to your organization.
80+
You first need to [enforce sign-in](/manuals/security/for-admins/enforce-sign-in/_index.md) to ensure that all Docker Desktop developers authenticate with your organization. Since Settings Management requires a Docker Business subscription, enforced sign-in guarantees that only authenticated users have access and that the feature consistently takes effect across all users, even though it may still work without enforced sign-in.
10681

107-
##### Setup
82+
#### Setup
10883

10984
[Create and configure the `admin-settings.json` file](../settings-management/configure.md) and specify:
11085

@@ -118,13 +93,13 @@ Enforcing sign-in ensures that your Docker Desktop developers always authenticat
11893
}
11994
```
12095

121-
By setting `"value": true`, the admin ensures ECI is enabled by default. By
122-
setting `"locked": true`, the admin ensures ECI can't be disabled by
123-
developers. If you wish to give developers the ability to disable the feature,
96+
Setting `"value": true` ensures ECI is enabled by default. By
97+
setting `"locked": true`, ECI can't be disabled by
98+
developers. If you want to give developers the ability to disable the feature,
12499
set `"locked": false`.
125100

126-
In addition, starting with Docker Desktop 4.27, admins can also configure Docker
127-
socket mount permissions for containers, as described [here](config.md).
101+
In addition, you can also [configure Docker
102+
socket mount permissions for containers](config.md).
128103

129104
For this to take effect:
130105

@@ -135,7 +110,7 @@ For this to take effect:
135110
>
136111
> Selecting **Restart** from the Docker menu isn't enough as it only restarts some components of Docker Desktop.
137112
138-
### What do users see when this setting is enforced by an admin?
113+
## What do users see when this setting is enforced by an administrator?
139114

140115
When Enhanced Container Isolation is enabled, users see:
141116
- **Use Enhanced Container Isolation** toggled on in **Settings** > **General**.

content/manuals/security/for-admins/hardened-desktop/enhanced-container-isolation/config.md

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,18 @@ aliases:
88
weight: 30
99
---
1010

11-
> [!NOTE]
12-
>
13-
> This feature is available with Docker Desktop version 4.27 (and later) on Mac, Linux, and Windows (Hyper-V).
14-
> For Windows with WSL 2, this feature requires Docker Desktop 4.28 and later.
15-
16-
This page describes optional, advanced configurations for ECI, once ECI is enabled.
17-
1811
## Docker socket mount permissions
1912

20-
By default, when ECI is enabled, Docker Desktop does not allow bind-mounting the
13+
By default, when Enhanced Container Isolation (ECI) is enabled, Docker Desktop does not allow bind-mounting the
2114
Docker Engine socket into containers:
2215

2316
```console
2417
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:cli
2518
docker: Error response from daemon: enhanced container isolation: docker socket mount denied for container with image "docker.io/library/docker"; image is not in the allowed list; if you wish to allow it, configure the docker socket image list in the Docker Desktop settings.
2619
```
2720
This prevents malicious containers from gaining access to the Docker Engine, as
28-
such access could allow them to perform supply chain attacks (e.g., build and
29-
push malicious images into the organization's repositories) or similar.
21+
such access could allow them to perform supply chain attacks. For example, build and
22+
push malicious images into the organization's repositories or similar.
3023

3124
However, some legitimate use cases require containers to have access to the
3225
Docker Engine socket. For example, the popular [Testcontainers](https://testcontainers.com/)
@@ -35,11 +28,11 @@ manage them or perform post-test cleanup. Similarly, some Buildpack frameworks,
3528
for example [Paketo](https://paketo.io/), require Docker socket bind-mounts into
3629
containers.
3730

38-
Starting with Docker Desktop 4.27, admins can optionally configure ECI to allow
31+
Administrators can optionally configure ECI to allow
3932
bind mounting the Docker Engine socket into containers, but in a controlled way.
4033

4134
This can be done via the Docker Socket mount permissions section in the
42-
[admin-settings.json](../settings-management/configure.md) file. For example:
35+
[`admin-settings.json`](../settings-management/configure.md) file. For example:
4336

4437
```json
4538
{
@@ -64,15 +57,14 @@ This can be done via the Docker Socket mount permissions section in the
6457
}
6558
```
6659

67-
As shown above, there are two configurations for bind-mounting the Docker
68-
socket into containers: the `imageList` and the `commandList`. These are
69-
described below.
60+
There are two configurations for bind-mounting the Docker
61+
socket into containers - the `imageList` and the `commandList`.
7062

7163
### Image list
7264

7365
The `imageList` is a list of container images that are allowed to bind-mount the
74-
Docker socket. By default the list is empty (i.e., no containers are allowed to
75-
bind-mount the Docker socket when ECI is enabled). However, an admin can add
66+
Docker socket. By default the list is empty, no containers are allowed to
67+
bind-mount the Docker socket when ECI is enabled. However, an administrator can add
7668
images to the list, using either of these formats:
7769

7870
| Image Reference Format | Description |
@@ -83,7 +75,7 @@ images to the list, using either of these formats:
8375
The image name follows the standard convention, so it can point to any registry
8476
and repository.
8577

86-
In the example above, the image list was configured with three images:
78+
In the previous example, the image list was configured with three images:
8779

8880
```json
8981
"imageList": {
@@ -107,11 +99,10 @@ $ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker:cli sh
10799

108100
> [!TIP]
109101
>
110-
> Be restrictive on the images you allow, as described in [Recommendations](#recommendations) below.
102+
> Be restrictive with the images you allow, as described in [Recommendations](#recommendations).
111103
112-
In general, it's easier to specify the image using the tag wildcard format
113-
(e.g., `<image-name>:*`) because then `imageList` doesn't need to be updated whenever a new version of the
114-
image is used. Alternatively, you can use an immutable tag (e.g., `:latest`),
104+
In general, it's easier to specify the image using the tag wildcard format, for example `<image-name>:*`, because then `imageList` doesn't need to be updated whenever a new version of the
105+
image is used. Alternatively, you can use an immutable tag, for example `:latest`,
115106
but it does not always work as well as the wildcard because, for example,
116107
Testcontainers uses specific versions of the image, not necessarily the latest
117108
one.
@@ -122,8 +113,7 @@ memory. Then, when a container is started with a Docker socket bind-mount,
122113
Docker Desktop checks if the container's image digest matches one of the allowed
123114
digests. If so, the container is allowed to start, otherwise it's blocked.
124115

125-
Note that due to the digest comparison mentioned in the prior paragraph, it's
126-
not possible to bypass the Docker socket mount permissions by retagging a
116+
Due to the digest comparison, it's not possible to bypass the Docker socket mount permissions by re-tagging a
127117
disallowed image to the name of an allowed one. In other words, if a user
128118
does:
129119

@@ -139,11 +129,9 @@ ones in the repository.
139129

140130
### Docker Socket Mount Permissions for derived images
141131

142-
> [!NOTE]
143-
>
144-
> This feature is available with Docker Desktop version 4.34 and later.
132+
{{ introduced desktop 4.34.0 "../../../../desktop/release-notes.md#4340" }}
145133

146-
As described in the prior section, admins can configure the list of container
134+
As described in the prior section, administrators can configure the list of container
147135
images that are allowed to mount the Docker socket via the `imageList`.
148136

149137
This works for most scenarios, but not always, because it requires knowing upfront
@@ -160,7 +148,7 @@ also apply to any local images derived (i.e., built from) an image in the
160148
That is, if a local image called "myLocalImage" is built from "myBaseImage"
161149
(i.e., has a Dockerfile with a `FROM myBaseImage`), then if "myBaseImage" is in
162150
the `imageList`, both "myBaseImage" and "myLocalImage" are allowed to mount the
163-
Docker socket (i.e., ECI won't block the mount).
151+
Docker socket.
164152

165153
For example, to enable Paketo buildpacks to work with Docker Desktop and ECI,
166154
simply add the following image to the `imageList`:
@@ -188,7 +176,7 @@ A couple of caveats:
188176

189177
* The `allowDerivedImages` setting only applies to local-only images built from
190178
an allowed image. That is, the derived image must not be present in a remote
191-
repository (because if it were, you would just list it's name in the `imageList`).
179+
repository because if it were, you would just list it's name in the `imageList`.
192180

193181
* For derived image checking to work, the parent image (i.e., the image in the
194182
`imageList`) must be present locally (i.e., must have been explicitly pulled
@@ -335,17 +323,17 @@ Whether to configure the list as an allow or deny list depends on the use case.
335323

336324
| Unsupported command | Description |
337325
| :------------------- | :---------- |
338-
| compose | Docker compose |
339-
| dev | Docker dev environments |
340-
| extension | Manages Docker extensions |
341-
| feedback | Send feedback to Docker |
342-
| init | Creates Docker-related starter files |
343-
| manifest | Manages Docker image manifests |
344-
| plugins | Manages plugins |
345-
| sbom | View Software Bill of Materials (SBOM) |
346-
| scan | Docker Scan |
347-
| scout | Docker Scout |
348-
| trust | Manage trust on Docker images |
326+
| `compose` | Docker Compose |
327+
| `dev` | Dev environments |
328+
| `extension` | Manages Docker Extensions |
329+
| `feedback` | Send feedback to Docker |
330+
| `init` | Creates Docker-related starter files |
331+
| `manifest` | Manages Docker image manifests |
332+
| `plugins` | Manages plugins |
333+
| `sbom` | View Software Bill of Materials (SBOM) |
334+
| `scan` | Docker Scan |
335+
| `scout` | Docker Scout |
336+
| `trust` | Manage trust on Docker images |
349337

350338
> [!NOTE]
351339
>

0 commit comments

Comments
 (0)