Skip to content

Commit b26161d

Browse files
authored
ENGDOCS-2324 (#21475)
<!--Delete sections as needed --> ## Description Light freshness for ECI content and removes references to DD versions that users can no longer download **Note** There is a lot of 'allow' violations. Am deliberately choosing to ignore them this time. ## Related issues or tickets <!-- Related issues, pull requests, or Jira tickets --> ## Reviews <!-- Notes for reviewers here --> <!-- List applicable reviews (optionally @tag reviewers) --> - [ ] Technical review - [ ] Editorial review - [ ] Product review
1 parent acfd04b commit b26161d

File tree

8 files changed

+136
-185
lines changed

8 files changed

+136
-185
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(?-i)[A-Z]{2,}s
1+
(?-i)[A-Z]{2,}'?s
22
Amazon
33
Anchore
44
Apple
@@ -21,6 +21,7 @@ Datadog
2121
Ddosify
2222
Debootstrap
2323
Dev Environments?
24+
Dev
2425
Django
2526
Docker Build Cloud
2627
Docker Business
@@ -71,6 +72,7 @@ Nuxeo
7172
OAuth
7273
OTel
7374
Okta
75+
Paketo
7476
PKG
7577
Postgres
7678
PowerShell
@@ -82,6 +84,7 @@ Snyk
8284
Solr
8385
SonarQube
8486
Syft
87+
Sysbox
8588
Sysdig
8689
Testcontainers
8790
Traefik
@@ -95,6 +98,7 @@ Zscaler
9598
Zsh
9699
[Aa]utobuild
97100
[Bb]uildx
101+
[Bb]uildpack(s)?
98102
[Cc]odenames?
99103
[Cc]ompose
100104
[Dd]istroless
@@ -109,13 +113,16 @@ Zsh
109113
[Nn]amespace
110114
[Oo]nboarding
111115
[Pp]aravirtualization
116+
[Pp]rocfs
112117
[Pp]roxied
113118
[Pp]roxying
114119
[Rr]eal-time
115120
[Rr]untimes?
116121
[Ss]andbox(ed)?
122+
[Ss]eccomp
117123
[Ss]wappable
118124
[Ss]warm
125+
[Ss]ysfs
119126
[Tt]oolchains?
120127
[Vv]irtiofs
121128
[Vv]irtualize
@@ -144,10 +151,13 @@ minikube
144151
monorepos?
145152
musl
146153
nameserver
154+
namespace
155+
namespacing
147156
npm
148157
osquery
149158
osxfs
150159
pgAdmin
160+
rootful
151161
runc
152162
snapshotters?
153163
stdin

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

Lines changed: 25 additions & 50 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, and 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:
73-
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).
60+
## How do I enable Enhanced Container Isolation?
7661

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](/manuals/security/for-admins/hardened-desktop/settings-management/configure-json-file.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,12 +110,12 @@ 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
113+
## What do users see when this setting is enforced by an administrator?
114+
138115
> [!TIP]
139116
>
140117
> You can now also configure these settings in the [Docker Admin Console](/manuals/security/for-admins/hardened-desktop/settings-management/configure-admin-console.md).
141118
142-
### What do users see when this setting is enforced by an admin?
143-
144119
When Enhanced Container Isolation is enabled, users see:
145120
- **Use Enhanced Container Isolation** toggled on in **Settings** > **General**.
146121
- Containers run within a Linux user namespace.

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

Lines changed: 27 additions & 38 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,12 @@ 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/_index.md) file. For example:
35+
[`admin-settings.json`](../settings-management/configure-json-file.md) file. For example:
36+
4337

4438
```json
4539
{
@@ -75,8 +69,8 @@ described below.
7569
### Image list
7670

7771
The `imageList` is a list of container images that are allowed to bind-mount the
78-
Docker socket. By default the list is empty (i.e., no containers are allowed to
79-
bind-mount the Docker socket when ECI is enabled). However, an admin can add
72+
Docker socket. By default the list is empty, no containers are allowed to
73+
bind-mount the Docker socket when ECI is enabled. However, an administrator can add
8074
images to the list, using either of these formats:
8175

8276
| Image Reference Format | Description |
@@ -87,7 +81,7 @@ images to the list, using either of these formats:
8781
The image name follows the standard convention, so it can point to any registry
8882
and repository.
8983

90-
In the example above, the image list was configured with three images:
84+
In the previous example, the image list was configured with three images:
9185

9286
```json
9387
"imageList": {
@@ -111,11 +105,10 @@ $ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker:cli sh
111105

112106
> [!TIP]
113107
>
114-
> Be restrictive on the images you allow, as described in [Recommendations](#recommendations) below.
108+
> Be restrictive with the images you allow, as described in [Recommendations](#recommendations).
115109
116-
In general, it's easier to specify the image using the tag wildcard format
117-
(e.g., `<image-name>:*`) because then `imageList` doesn't need to be updated whenever a new version of the
118-
image is used. Alternatively, you can use an immutable tag (e.g., `:latest`),
110+
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
111+
image is used. Alternatively, you can use an immutable tag, for example `:latest`,
119112
but it does not always work as well as the wildcard because, for example,
120113
Testcontainers uses specific versions of the image, not necessarily the latest
121114
one.
@@ -126,8 +119,7 @@ memory. Then, when a container is started with a Docker socket bind-mount,
126119
Docker Desktop checks if the container's image digest matches one of the allowed
127120
digests. If so, the container is allowed to start, otherwise it's blocked.
128121

129-
Note that due to the digest comparison mentioned in the prior paragraph, it's
130-
not possible to bypass the Docker socket mount permissions by retagging a
122+
Due to the digest comparison, it's not possible to bypass the Docker socket mount permissions by re-tagging a
131123
disallowed image to the name of an allowed one. In other words, if a user
132124
does:
133125

@@ -143,11 +135,9 @@ ones in the repository.
143135

144136
### Docker Socket Mount Permissions for derived images
145137

146-
> [!NOTE]
147-
>
148-
> This feature is available with Docker Desktop version 4.34 and later.
138+
{{ introduced desktop 4.34.0 "../../../../desktop/release-notes.md#4340" }}
149139

150-
As described in the prior section, admins can configure the list of container
140+
As described in the prior section, administrators can configure the list of container
151141
images that are allowed to mount the Docker socket via the `imageList`.
152142

153143
This works for most scenarios, but not always, because it requires knowing upfront
@@ -164,7 +154,7 @@ also apply to any local images derived (i.e., built from) an image in the
164154
That is, if a local image called "myLocalImage" is built from "myBaseImage"
165155
(i.e., has a Dockerfile with a `FROM myBaseImage`), then if "myBaseImage" is in
166156
the `imageList`, both "myBaseImage" and "myLocalImage" are allowed to mount the
167-
Docker socket (i.e., ECI won't block the mount).
157+
Docker socket.
168158

169159
For example, to enable Paketo buildpacks to work with Docker Desktop and ECI,
170160
simply add the following image to the `imageList`:
@@ -192,7 +182,7 @@ A couple of caveats:
192182

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

197187
* For derived image checking to work, the parent image (i.e., the image in the
198188
`imageList`) must be present locally (i.e., must have been explicitly pulled
@@ -339,17 +329,16 @@ Whether to configure the list as an allow or deny list depends on the use case.
339329

340330
| Unsupported command | Description |
341331
| :------------------- | :---------- |
342-
| compose | Docker compose |
343-
| dev | Docker dev environments |
344-
| extension | Manages Docker extensions |
345-
| feedback | Send feedback to Docker |
346-
| init | Creates Docker-related starter files |
347-
| manifest | Manages Docker image manifests |
348-
| plugins | Manages plugins |
349-
| sbom | View Software Bill of Materials (SBOM) |
350-
| scan | Docker Scan |
351-
| scout | Docker Scout |
352-
| trust | Manage trust on Docker images |
332+
| `compose` | Docker Compose |
333+
| `dev` | Dev environments |
334+
| `extension` | Manages Docker Extensions |
335+
| `feedback` | Send feedback to Docker |
336+
| `init` | Creates Docker-related starter files |
337+
| `manifest` | Manages Docker image manifests |
338+
| `plugin` | Manages plugins |
339+
| `sbom` | View Software Bill of Materials (SBOM) |
340+
| `scout` | Docker Scout |
341+
| `trust` | Manage trust on Docker images |
353342

354343
> [!NOTE]
355344
>

0 commit comments

Comments
 (0)