github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/docs/reference/run.md (about) 1 --- 2 description: "Configure containers at runtime" 3 keywords: "docker, run, configure, runtime" 4 --- 5 6 <!-- This file is maintained within the docker/cli GitHub 7 repository at https://github.com/docker/cli/. Make all 8 pull requests against that repo. If you see this file in 9 another repository, consider it read-only there, as it will 10 periodically be overwritten by the definitive file. Pull 11 requests which include edits to this file in other repositories 12 will be rejected. 13 --> 14 15 # Docker run reference 16 17 Docker runs processes in isolated containers. A container is a process 18 which runs on a host. The host may be local or remote. When an operator 19 executes `docker run`, the container process that runs is isolated in 20 that it has its own file system, its own networking, and its own 21 isolated process tree separate from the host. 22 23 This page details how to use the `docker run` command to define the 24 container's resources at runtime. 25 26 ## General form 27 28 The basic `docker run` command takes this form: 29 30 $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 31 32 The `docker run` command must specify an [*IMAGE*](glossary.md#image) 33 to derive the container from. An image developer can define image 34 defaults related to: 35 36 * detached or foreground running 37 * container identification 38 * network settings 39 * runtime constraints on CPU and memory 40 41 With the `docker run [OPTIONS]` an operator can add to or override the 42 image defaults set by a developer. And, additionally, operators can 43 override nearly all the defaults set by the Docker runtime itself. The 44 operator's ability to override image and Docker runtime defaults is why 45 [*run*](commandline/run.md) has more options than any 46 other `docker` command. 47 48 To learn how to interpret the types of `[OPTIONS]`, see [*Option 49 types*](commandline/cli.md#option-types). 50 51 > **Note**: Depending on your Docker system configuration, you may be 52 > required to preface the `docker run` command with `sudo`. To avoid 53 > having to use `sudo` with the `docker` command, your system 54 > administrator can create a Unix group called `docker` and add users to 55 > it. For more information about this configuration, refer to the Docker 56 > installation documentation for your operating system. 57 58 59 ## Operator exclusive options 60 61 Only the operator (the person executing `docker run`) can set the 62 following options. 63 64 - [Detached vs foreground](#detached-vs-foreground) 65 - [Detached (-d)](#detached--d) 66 - [Foreground](#foreground) 67 - [Container identification](#container-identification) 68 - [Name (--name)](#name---name) 69 - [PID equivalent](#pid-equivalent) 70 - [IPC settings (--ipc)](#ipc-settings---ipc) 71 - [Network settings](#network-settings) 72 - [Restart policies (--restart)](#restart-policies---restart) 73 - [Clean up (--rm)](#clean-up---rm) 74 - [Runtime constraints on resources](#runtime-constraints-on-resources) 75 - [Runtime privilege and Linux capabilities](#runtime-privilege-and-linux-capabilities) 76 77 ## Detached vs foreground 78 79 When starting a Docker container, you must first decide if you want to 80 run the container in the background in a "detached" mode or in the 81 default foreground mode: 82 83 -d=false: Detached mode: Run container in the background, print new container id 84 85 ### Detached (-d) 86 87 To start a container in detached mode, you use `-d=true` or just `-d` option. By 88 design, containers started in detached mode exit when the root process used to 89 run the container exits, unless you also specify the `--rm` option. If you use 90 `-d` with `--rm`, the container is removed when it exits **or** when the daemon 91 exits, whichever happens first. 92 93 Do not pass a `service x start` command to a detached container. For example, this 94 command attempts to start the `nginx` service. 95 96 $ docker run -d -p 80:80 my_image service nginx start 97 98 This succeeds in starting the `nginx` service inside the container. However, it 99 fails the detached container paradigm in that, the root process (`service nginx 100 start`) returns and the detached container stops as designed. As a result, the 101 `nginx` service is started but could not be used. Instead, to start a process 102 such as the `nginx` web server do the following: 103 104 $ docker run -d -p 80:80 my_image nginx -g 'daemon off;' 105 106 To do input/output with a detached container use network connections or shared 107 volumes. These are required because the container is no longer listening to the 108 command line where `docker run` was run. 109 110 To reattach to a detached container, use `docker` 111 [*attach*](commandline/attach.md) command. 112 113 ### Foreground 114 115 In foreground mode (the default when `-d` is not specified), `docker 116 run` can start the process in the container and attach the console to 117 the process's standard input, output, and standard error. It can even 118 pretend to be a TTY (this is what most command line executables expect) 119 and pass along signals. All of that is configurable: 120 121 -a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR` 122 -t : Allocate a pseudo-tty 123 --sig-proxy=true: Proxy all received signals to the process (non-TTY mode only) 124 -i : Keep STDIN open even if not attached 125 126 If you do not specify `-a` then Docker will [attach to both stdout and stderr 127 ]( https://github.com/docker/docker/blob/4118e0c9eebda2412a09ae66e90c34b85fae3275/runconfig/opts/parse.go#L267). 128 You can specify to which of the three standard streams (`STDIN`, `STDOUT`, 129 `STDERR`) you'd like to connect instead, as in: 130 131 $ docker run -a stdin -a stdout -i -t ubuntu /bin/bash 132 133 For interactive processes (like a shell), you must use `-i -t` together in 134 order to allocate a tty for the container process. `-i -t` is often written `-it` 135 as you'll see in later examples. Specifying `-t` is forbidden when the client 136 is receiving its standard input from a pipe, as in: 137 138 $ echo test | docker run -i busybox cat 139 140 >**Note**: A process running as PID 1 inside a container is treated 141 >specially by Linux: it ignores any signal with the default action. 142 >So, the process will not terminate on `SIGINT` or `SIGTERM` unless it is 143 >coded to do so. 144 145 ## Container identification 146 147 ### Name (--name) 148 149 The operator can identify a container in three ways: 150 151 | Identifier type | Example value | 152 |:----------------------|:-------------------------------------------------------------------| 153 | UUID long identifier | "f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778" | 154 | UUID short identifier | "f78375b1c487" | 155 | Name | "evil_ptolemy" | 156 157 The UUID identifiers come from the Docker daemon. If you do not assign a 158 container name with the `--name` option, then the daemon generates a random 159 string name for you. Defining a `name` can be a handy way to add meaning to a 160 container. If you specify a `name`, you can use it when referencing the 161 container within a Docker network. This works for both background and foreground 162 Docker containers. 163 164 > **Note**: Containers on the default bridge network must be linked to 165 > communicate by name. 166 167 ### PID equivalent 168 169 Finally, to help with automation, you can have Docker write the 170 container ID out to a file of your choosing. This is similar to how some 171 programs might write out their process ID to a file (you've seen them as 172 PID files): 173 174 --cidfile="": Write the container ID to the file 175 176 ### Image[:tag] 177 178 While not strictly a means of identifying a container, you can specify a version of an 179 image you'd like to run the container with by adding `image[:tag]` to the command. For 180 example, `docker run ubuntu:14.04`. 181 182 ### Image[@digest] 183 184 Images using the v2 or later image format have a content-addressable identifier 185 called a digest. As long as the input used to generate the image is unchanged, 186 the digest value is predictable and referenceable. 187 188 The following example runs a container from the `alpine` image with the 189 `sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0` digest: 190 191 $ docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date 192 193 ## PID settings (--pid) 194 195 --pid="" : Set the PID (Process) Namespace mode for the container, 196 'container:<name|id>': joins another container's PID namespace 197 'host': use the host's PID namespace inside the container 198 199 By default, all containers have the PID namespace enabled. 200 201 PID namespace provides separation of processes. The PID Namespace removes the 202 view of the system processes, and allows process ids to be reused including 203 pid 1. 204 205 In certain cases you want your container to share the host's process namespace, 206 basically allowing processes within the container to see all of the processes 207 on the system. For example, you could build a container with debugging tools 208 like `strace` or `gdb`, but want to use these tools when debugging processes 209 within the container. 210 211 ### Example: run htop inside a container 212 213 Create this Dockerfile: 214 215 ``` 216 FROM alpine:latest 217 RUN apk add --update htop && rm -rf /var/cache/apk/* 218 CMD ["htop"] 219 ``` 220 221 Build the Dockerfile and tag the image as `myhtop`: 222 223 ```bash 224 $ docker build -t myhtop . 225 ``` 226 227 Use the following command to run `htop` inside a container: 228 229 ``` 230 $ docker run -it --rm --pid=host myhtop 231 ``` 232 233 Joining another container's pid namespace can be used for debugging that container. 234 235 ### Example 236 237 Start a container running a redis server: 238 239 ```bash 240 $ docker run --name my-redis -d redis 241 ``` 242 243 Debug the redis container by running another container that has strace in it: 244 245 ```bash 246 $ docker run -it --pid=container:my-redis my_strace_docker_image bash 247 $ strace -p 1 248 ``` 249 250 ## UTS settings (--uts) 251 252 --uts="" : Set the UTS namespace mode for the container, 253 'host': use the host's UTS namespace inside the container 254 255 The UTS namespace is for setting the hostname and the domain that is visible 256 to running processes in that namespace. By default, all containers, including 257 those with `--network=host`, have their own UTS namespace. The `host` setting will 258 result in the container using the same UTS namespace as the host. Note that 259 `--hostname` is invalid in `host` UTS mode. 260 261 You may wish to share the UTS namespace with the host if you would like the 262 hostname of the container to change as the hostname of the host changes. A 263 more advanced use case would be changing the host's hostname from a container. 264 265 ## IPC settings (--ipc) 266 267 --ipc="MODE" : Set the IPC mode for the container 268 269 The following values are accepted: 270 271 | Value | Description | 272 |:---------------------------|:----------------------------------------------------------------------------------| 273 | "" | Use daemon's default. | 274 | "none" | Own private IPC namespace, with /dev/shm not mounted. | 275 | "private" | Own private IPC namespace. | 276 | "shareable" | Own private IPC namespace, with a possibility to share it with other containers. | 277 | "container:<_name-or-ID_>" | Join another ("shareable") container's IPC namespace. | 278 | "host" | Use the host system's IPC namespace. | 279 280 If not specified, daemon default is used, which can either be `"private"` 281 or `"shareable"`, depending on the daemon version and configuration. 282 283 IPC (POSIX/SysV IPC) namespace provides separation of named shared memory 284 segments, semaphores and message queues. 285 286 Shared memory segments are used to accelerate inter-process communication at 287 memory speed, rather than through pipes or through the network stack. Shared 288 memory is commonly used by databases and custom-built (typically C/OpenMPI, 289 C++/using boost libraries) high performance applications for scientific 290 computing and financial services industries. If these types of applications 291 are broken into multiple containers, you might need to share the IPC mechanisms 292 of the containers, using `"shareable"` mode for the main (i.e. "donor") 293 container, and `"container:<donor-name-or-ID>"` for other containers. 294 295 ## Network settings 296 297 --dns=[] : Set custom dns servers for the container 298 --network="bridge" : Connect a container to a network 299 'bridge': create a network stack on the default Docker bridge 300 'none': no networking 301 'container:<name|id>': reuse another container's network stack 302 'host': use the Docker host network stack 303 '<network-name>|<network-id>': connect to a user-defined network 304 --network-alias=[] : Add network-scoped alias for the container 305 --add-host="" : Add a line to /etc/hosts (host:IP) 306 --mac-address="" : Sets the container's Ethernet device's MAC address 307 --ip="" : Sets the container's Ethernet device's IPv4 address 308 --ip6="" : Sets the container's Ethernet device's IPv6 address 309 --link-local-ip=[] : Sets one or more container's Ethernet device's link local IPv4/IPv6 addresses 310 311 By default, all containers have networking enabled and they can make any 312 outgoing connections. The operator can completely disable networking 313 with `docker run --network none` which disables all incoming and outgoing 314 networking. In cases like this, you would perform I/O through files or 315 `STDIN` and `STDOUT` only. 316 317 Publishing ports and linking to other containers only works with the default (bridge). The linking feature is a legacy feature. You should always prefer using Docker network drivers over linking. 318 319 Your container will use the same DNS servers as the host by default, but 320 you can override this with `--dns`. 321 322 By default, the MAC address is generated using the IP address allocated to the 323 container. You can set the container's MAC address explicitly by providing a 324 MAC address via the `--mac-address` parameter (format:`12:34:56:78:9a:bc`).Be 325 aware that Docker does not check if manually specified MAC addresses are unique. 326 327 Supported networks : 328 329 <table> 330 <thead> 331 <tr> 332 <th class="no-wrap">Network</th> 333 <th>Description</th> 334 </tr> 335 </thead> 336 <tbody> 337 <tr> 338 <td class="no-wrap"><strong>none</strong></td> 339 <td> 340 No networking in the container. 341 </td> 342 </tr> 343 <tr> 344 <td class="no-wrap"><strong>bridge</strong> (default)</td> 345 <td> 346 Connect the container to the bridge via veth interfaces. 347 </td> 348 </tr> 349 <tr> 350 <td class="no-wrap"><strong>host</strong></td> 351 <td> 352 Use the host's network stack inside the container. 353 </td> 354 </tr> 355 <tr> 356 <td class="no-wrap"><strong>container</strong>:<name|id></td> 357 <td> 358 Use the network stack of another container, specified via 359 its <i>name</i> or <i>id</i>. 360 </td> 361 </tr> 362 <tr> 363 <td class="no-wrap"><strong>NETWORK</strong></td> 364 <td> 365 Connects the container to a user created network (using <code>docker network create</code> command) 366 </td> 367 </tr> 368 </tbody> 369 </table> 370 371 #### Network: none 372 373 With the network is `none` a container will not have 374 access to any external routes. The container will still have a 375 `loopback` interface enabled in the container but it does not have any 376 routes to external traffic. 377 378 #### Network: bridge 379 380 With the network set to `bridge` a container will use docker's 381 default networking setup. A bridge is setup on the host, commonly named 382 `docker0`, and a pair of `veth` interfaces will be created for the 383 container. One side of the `veth` pair will remain on the host attached 384 to the bridge while the other side of the pair will be placed inside the 385 container's namespaces in addition to the `loopback` interface. An IP 386 address will be allocated for containers on the bridge's network and 387 traffic will be routed though this bridge to the container. 388 389 Containers can communicate via their IP addresses by default. To communicate by 390 name, they must be linked. 391 392 #### Network: host 393 394 With the network set to `host` a container will share the host's 395 network stack and all interfaces from the host will be available to the 396 container. The container's hostname will match the hostname on the host 397 system. Note that `--mac-address` is invalid in `host` netmode. Even in `host` 398 network mode a container has its own UTS namespace by default. As such 399 `--hostname` is allowed in `host` network mode and will only change the 400 hostname inside the container. 401 Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and 402 `--dns-option` options can be used in `host` network mode. These options update 403 `/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to 404 `/etc/hosts` and `/etc/resolv.conf` on the host. 405 406 Compared to the default `bridge` mode, the `host` mode gives *significantly* 407 better networking performance since it uses the host's native networking stack 408 whereas the bridge has to go through one level of virtualization through the 409 docker daemon. It is recommended to run containers in this mode when their 410 networking performance is critical, for example, a production Load Balancer 411 or a High Performance Web Server. 412 413 > **Note**: `--network="host"` gives the container full access to local system 414 > services such as D-bus and is therefore considered insecure. 415 416 #### Network: container 417 418 With the network set to `container` a container will share the 419 network stack of another container. The other container's name must be 420 provided in the format of `--network container:<name|id>`. Note that `--add-host` 421 `--hostname` `--dns` `--dns-search` `--dns-option` and `--mac-address` are 422 invalid in `container` netmode, and `--publish` `--publish-all` `--expose` are 423 also invalid in `container` netmode. 424 425 Example running a Redis container with Redis binding to `localhost` then 426 running the `redis-cli` command and connecting to the Redis server over the 427 `localhost` interface. 428 429 $ docker run -d --name redis example/redis --bind 127.0.0.1 430 $ # use the redis container's network stack to access localhost 431 $ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1 432 433 #### User-defined network 434 435 You can create a network using a Docker network driver or an external network 436 driver plugin. You can connect multiple containers to the same network. Once 437 connected to a user-defined network, the containers can communicate easily using 438 only another container's IP address or name. 439 440 For `overlay` networks or custom plugins that support multi-host connectivity, 441 containers connected to the same multi-host network but launched from different 442 Engines can also communicate in this way. 443 444 The following example creates a network using the built-in `bridge` network 445 driver and running a container in the created network 446 447 ``` 448 $ docker network create -d bridge my-net 449 $ docker run --network=my-net -itd --name=container3 busybox 450 ``` 451 452 ### Managing /etc/hosts 453 454 Your container will have lines in `/etc/hosts` which define the hostname of the 455 container itself as well as `localhost` and a few other common things. The 456 `--add-host` flag can be used to add additional lines to `/etc/hosts`. 457 458 $ docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts 459 172.17.0.22 09d03f76bf2c 460 fe00::0 ip6-localnet 461 ff00::0 ip6-mcastprefix 462 ff02::1 ip6-allnodes 463 ff02::2 ip6-allrouters 464 127.0.0.1 localhost 465 ::1 localhost ip6-localhost ip6-loopback 466 86.75.30.9 db-static 467 468 If a container is connected to the default bridge network and `linked` 469 with other containers, then the container's `/etc/hosts` file is updated 470 with the linked container's name. 471 472 > **Note** Since Docker may live update the container’s `/etc/hosts` file, there 473 may be situations when processes inside the container can end up reading an 474 empty or incomplete `/etc/hosts` file. In most cases, retrying the read again 475 should fix the problem. 476 477 ## Restart policies (--restart) 478 479 Using the `--restart` flag on Docker run you can specify a restart policy for 480 how a container should or should not be restarted on exit. 481 482 When a restart policy is active on a container, it will be shown as either `Up` 483 or `Restarting` in [`docker ps`](commandline/ps.md). It can also be 484 useful to use [`docker events`](commandline/events.md) to see the 485 restart policy in effect. 486 487 Docker supports the following restart policies: 488 489 <table> 490 <thead> 491 <tr> 492 <th>Policy</th> 493 <th>Result</th> 494 </tr> 495 </thead> 496 <tbody> 497 <tr> 498 <td><strong>no</strong></td> 499 <td> 500 Do not automatically restart the container when it exits. This is the 501 default. 502 </td> 503 </tr> 504 <tr> 505 <td> 506 <span style="white-space: nowrap"> 507 <strong>on-failure</strong>[:max-retries] 508 </span> 509 </td> 510 <td> 511 Restart only if the container exits with a non-zero exit status. 512 Optionally, limit the number of restart retries the Docker 513 daemon attempts. 514 </td> 515 </tr> 516 <tr> 517 <td><strong>always</strong></td> 518 <td> 519 Always restart the container regardless of the exit status. 520 When you specify always, the Docker daemon will try to restart 521 the container indefinitely. The container will also always start 522 on daemon startup, regardless of the current state of the container. 523 </td> 524 </tr> 525 <tr> 526 <td><strong>unless-stopped</strong></td> 527 <td> 528 Always restart the container regardless of the exit status, 529 including on daemon startup, except if the container was put 530 into a stopped state before the Docker daemon was stopped. 531 </td> 532 </tr> 533 </tbody> 534 </table> 535 536 An ever increasing delay (double the previous delay, starting at 100 537 milliseconds) is added before each restart to prevent flooding the server. 538 This means the daemon will wait for 100 ms, then 200 ms, 400, 800, 1600, 539 and so on until either the `on-failure` limit is hit, or when you `docker stop` 540 or `docker rm -f` the container. 541 542 If a container is successfully restarted (the container is started and runs 543 for at least 10 seconds), the delay is reset to its default value of 100 ms. 544 545 You can specify the maximum amount of times Docker will try to restart the 546 container when using the **on-failure** policy. The default is that Docker 547 will try forever to restart the container. The number of (attempted) restarts 548 for a container can be obtained via [`docker inspect`](commandline/inspect.md). For example, to get the number of restarts 549 for container "my-container"; 550 551 {% raw %} 552 $ docker inspect -f "{{ .RestartCount }}" my-container 553 # 2 554 {% endraw %} 555 556 Or, to get the last time the container was (re)started; 557 558 {% raw %} 559 $ docker inspect -f "{{ .State.StartedAt }}" my-container 560 # 2015-03-04T23:47:07.691840179Z 561 {% endraw %} 562 563 564 Combining `--restart` (restart policy) with the `--rm` (clean up) flag results 565 in an error. On container restart, attached clients are disconnected. See the 566 examples on using the [`--rm` (clean up)](#clean-up-rm) flag later in this page. 567 568 ### Examples 569 570 $ docker run --restart=always redis 571 572 This will run the `redis` container with a restart policy of **always** 573 so that if the container exits, Docker will restart it. 574 575 $ docker run --restart=on-failure:10 redis 576 577 This will run the `redis` container with a restart policy of **on-failure** 578 and a maximum restart count of 10. If the `redis` container exits with a 579 non-zero exit status more than 10 times in a row Docker will abort trying to 580 restart the container. Providing a maximum restart limit is only valid for the 581 **on-failure** policy. 582 583 ## Exit Status 584 585 The exit code from `docker run` gives information about why the container 586 failed to run or why it exited. When `docker run` exits with a non-zero code, 587 the exit codes follow the `chroot` standard, see below: 588 589 **_125_** if the error is with Docker daemon **_itself_** 590 591 $ docker run --foo busybox; echo $? 592 # flag provided but not defined: --foo 593 See 'docker run --help'. 594 125 595 596 **_126_** if the **_contained command_** cannot be invoked 597 598 $ docker run busybox /etc; echo $? 599 # docker: Error response from daemon: Container command '/etc' could not be invoked. 600 126 601 602 **_127_** if the **_contained command_** cannot be found 603 604 $ docker run busybox foo; echo $? 605 # docker: Error response from daemon: Container command 'foo' not found or does not exist. 606 127 607 608 **_Exit code_** of **_contained command_** otherwise 609 610 $ docker run busybox /bin/sh -c 'exit 3'; echo $? 611 # 3 612 613 ## Clean up (--rm) 614 615 By default a container's file system persists even after the container 616 exits. This makes debugging a lot easier (since you can inspect the 617 final state) and you retain all your data by default. But if you are 618 running short-term **foreground** processes, these container file 619 systems can really pile up. If instead you'd like Docker to 620 **automatically clean up the container and remove the file system when 621 the container exits**, you can add the `--rm` flag: 622 623 --rm=false: Automatically remove the container when it exits 624 625 > **Note**: When you set the `--rm` flag, Docker also removes the anonymous volumes 626 associated with the container when the container is removed. This is similar 627 to running `docker rm -v my-container`. Only volumes that are specified without a 628 name are removed. For example, with 629 `docker run --rm -v /foo -v awesome:/bar busybox top`, the volume for `/foo` will be removed, 630 but the volume for `/bar` will not. Volumes inherited via `--volumes-from` will be removed 631 with the same logic -- if the original volume was specified with a name it will **not** be removed. 632 633 ## Security configuration 634 --security-opt="label=user:USER" : Set the label user for the container 635 --security-opt="label=role:ROLE" : Set the label role for the container 636 --security-opt="label=type:TYPE" : Set the label type for the container 637 --security-opt="label=level:LEVEL" : Set the label level for the container 638 --security-opt="label=disable" : Turn off label confinement for the container 639 --security-opt="apparmor=PROFILE" : Set the apparmor profile to be applied to the container 640 --security-opt="no-new-privileges:true|false" : Disable/enable container processes from gaining new privileges 641 --security-opt="seccomp=unconfined" : Turn off seccomp confinement for the container 642 --security-opt="seccomp=profile.json": White listed syscalls seccomp Json file to be used as a seccomp filter 643 644 645 You can override the default labeling scheme for each container by specifying 646 the `--security-opt` flag. Specifying the level in the following command 647 allows you to share the same content between containers. 648 649 $ docker run --security-opt label=level:s0:c100,c200 -it fedora bash 650 651 > **Note**: Automatic translation of MLS labels is not currently supported. 652 653 To disable the security labeling for this container versus running with the 654 `--privileged` flag, use the following command: 655 656 $ docker run --security-opt label=disable -it fedora bash 657 658 If you want a tighter security policy on the processes within a container, 659 you can specify an alternate type for the container. You could run a container 660 that is only allowed to listen on Apache ports by executing the following 661 command: 662 663 $ docker run --security-opt label=type:svirt_apache_t -it centos bash 664 665 > **Note**: You would have to write policy defining a `svirt_apache_t` type. 666 667 If you want to prevent your container processes from gaining additional 668 privileges, you can execute the following command: 669 670 $ docker run --security-opt no-new-privileges -it centos bash 671 672 This means that commands that raise privileges such as `su` or `sudo` will no longer work. 673 It also causes any seccomp filters to be applied later, after privileges have been dropped 674 which may mean you can have a more restrictive set of filters. 675 For more details, see the [kernel documentation](https://www.kernel.org/doc/Documentation/prctl/no_new_privs.txt). 676 677 ## Specify an init process 678 679 You can use the `--init` flag to indicate that an init process should be used as 680 the PID 1 in the container. Specifying an init process ensures the usual 681 responsibilities of an init system, such as reaping zombie processes, are 682 performed inside the created container. 683 684 The default init process used is the first `docker-init` executable found in the 685 system path of the Docker daemon process. This `docker-init` binary, included in 686 the default installation, is backed by [tini](https://github.com/krallin/tini). 687 688 ## Specify custom cgroups 689 690 Using the `--cgroup-parent` flag, you can pass a specific cgroup to run a 691 container in. This allows you to create and manage cgroups on their own. You can 692 define custom resources for those cgroups and put containers under a common 693 parent group. 694 695 ## Runtime constraints on resources 696 697 The operator can also adjust the performance parameters of the 698 container: 699 700 | Option | Description | 701 |:---------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 702 | `-m`, `--memory=""` | Memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. | 703 | `--memory-swap=""` | Total memory limit (memory + swap, format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. | 704 | `--memory-reservation=""` | Memory soft limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. | 705 | `--kernel-memory=""` | Kernel memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M. | 706 | `-c`, `--cpu-shares=0` | CPU shares (relative weight) | 707 | `--cpus=0.000` | Number of CPUs. Number is a fractional number. 0.000 means no limit. | 708 | `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period | 709 | `--cpuset-cpus=""` | CPUs in which to allow execution (0-3, 0,1) | 710 | `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. | 711 | `--cpu-quota=0` | Limit the CPU CFS (Completely Fair Scheduler) quota | 712 | `--cpu-rt-period=0` | Limit the CPU real-time period. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits. | 713 | `--cpu-rt-runtime=0` | Limit the CPU real-time runtime. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits. | 714 | `--blkio-weight=0` | Block IO weight (relative weight) accepts a weight value between 10 and 1000. | 715 | `--blkio-weight-device=""` | Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`) | 716 | `--device-read-bps=""` | Limit read rate from a device (format: `<device-path>:<number>[<unit>]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`. | 717 | `--device-write-bps=""` | Limit write rate to a device (format: `<device-path>:<number>[<unit>]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`. | 718 | `--device-read-iops="" ` | Limit read rate (IO per second) from a device (format: `<device-path>:<number>`). Number is a positive integer. | 719 | `--device-write-iops="" ` | Limit write rate (IO per second) to a device (format: `<device-path>:<number>`). Number is a positive integer. | 720 | `--oom-kill-disable=false` | Whether to disable OOM Killer for the container or not. | 721 | `--oom-score-adj=0` | Tune container's OOM preferences (-1000 to 1000) | 722 | `--memory-swappiness=""` | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. | 723 | `--shm-size=""` | Size of `/dev/shm`. The format is `<number><unit>`. `number` must be greater than `0`. Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. | 724 725 ### User memory constraints 726 727 We have four ways to set user memory usage: 728 729 <table> 730 <thead> 731 <tr> 732 <th>Option</th> 733 <th>Result</th> 734 </tr> 735 </thead> 736 <tbody> 737 <tr> 738 <td class="no-wrap"> 739 <strong>memory=inf, memory-swap=inf</strong> (default) 740 </td> 741 <td> 742 There is no memory limit for the container. The container can use 743 as much memory as needed. 744 </td> 745 </tr> 746 <tr> 747 <td class="no-wrap"><strong>memory=L<inf, memory-swap=inf</strong></td> 748 <td> 749 (specify memory and set memory-swap as <code>-1</code>) The container is 750 not allowed to use more than L bytes of memory, but can use as much swap 751 as is needed (if the host supports swap memory). 752 </td> 753 </tr> 754 <tr> 755 <td class="no-wrap"><strong>memory=L<inf, memory-swap=2*L</strong></td> 756 <td> 757 (specify memory without memory-swap) The container is not allowed to 758 use more than L bytes of memory, swap <i>plus</i> memory usage is double 759 of that. 760 </td> 761 </tr> 762 <tr> 763 <td class="no-wrap"> 764 <strong>memory=L<inf, memory-swap=S<inf, L<=S</strong> 765 </td> 766 <td> 767 (specify both memory and memory-swap) The container is not allowed to 768 use more than L bytes of memory, swap <i>plus</i> memory usage is limited 769 by S. 770 </td> 771 </tr> 772 </tbody> 773 </table> 774 775 Examples: 776 777 $ docker run -it ubuntu:14.04 /bin/bash 778 779 We set nothing about memory, this means the processes in the container can use 780 as much memory and swap memory as they need. 781 782 $ docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash 783 784 We set memory limit and disabled swap memory limit, this means the processes in 785 the container can use 300M memory and as much swap memory as they need (if the 786 host supports swap memory). 787 788 $ docker run -it -m 300M ubuntu:14.04 /bin/bash 789 790 We set memory limit only, this means the processes in the container can use 791 300M memory and 300M swap memory, by default, the total virtual memory size 792 (--memory-swap) will be set as double of memory, in this case, memory + swap 793 would be 2*300M, so processes can use 300M swap memory as well. 794 795 $ docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash 796 797 We set both memory and swap memory, so the processes in the container can use 798 300M memory and 700M swap memory. 799 800 Memory reservation is a kind of memory soft limit that allows for greater 801 sharing of memory. Under normal circumstances, containers can use as much of 802 the memory as needed and are constrained only by the hard limits set with the 803 `-m`/`--memory` option. When memory reservation is set, Docker detects memory 804 contention or low memory and forces containers to restrict their consumption to 805 a reservation limit. 806 807 Always set the memory reservation value below the hard limit, otherwise the hard 808 limit takes precedence. A reservation of 0 is the same as setting no 809 reservation. By default (without reservation set), memory reservation is the 810 same as the hard memory limit. 811 812 Memory reservation is a soft-limit feature and does not guarantee the limit 813 won't be exceeded. Instead, the feature attempts to ensure that, when memory is 814 heavily contended for, memory is allocated based on the reservation hints/setup. 815 816 The following example limits the memory (`-m`) to 500M and sets the memory 817 reservation to 200M. 818 819 ```bash 820 $ docker run -it -m 500M --memory-reservation 200M ubuntu:14.04 /bin/bash 821 ``` 822 823 Under this configuration, when the container consumes memory more than 200M and 824 less than 500M, the next system memory reclaim attempts to shrink container 825 memory below 200M. 826 827 The following example set memory reservation to 1G without a hard memory limit. 828 829 ```bash 830 $ docker run -it --memory-reservation 1G ubuntu:14.04 /bin/bash 831 ``` 832 833 The container can use as much memory as it needs. The memory reservation setting 834 ensures the container doesn't consume too much memory for long time, because 835 every memory reclaim shrinks the container's consumption to the reservation. 836 837 By default, kernel kills processes in a container if an out-of-memory (OOM) 838 error occurs. To change this behaviour, use the `--oom-kill-disable` option. 839 Only disable the OOM killer on containers where you have also set the 840 `-m/--memory` option. If the `-m` flag is not set, this can result in the host 841 running out of memory and require killing the host's system processes to free 842 memory. 843 844 The following example limits the memory to 100M and disables the OOM killer for 845 this container: 846 847 $ docker run -it -m 100M --oom-kill-disable ubuntu:14.04 /bin/bash 848 849 The following example, illustrates a dangerous way to use the flag: 850 851 $ docker run -it --oom-kill-disable ubuntu:14.04 /bin/bash 852 853 The container has unlimited memory which can cause the host to run out memory 854 and require killing system processes to free memory. The `--oom-score-adj` 855 parameter can be changed to select the priority of which containers will 856 be killed when the system is out of memory, with negative scores making them 857 less likely to be killed, and positive scores more likely. 858 859 ### Kernel memory constraints 860 861 Kernel memory is fundamentally different than user memory as kernel memory can't 862 be swapped out. The inability to swap makes it possible for the container to 863 block system services by consuming too much kernel memory. Kernel memory includes: 864 865 - stack pages 866 - slab pages 867 - sockets memory pressure 868 - tcp memory pressure 869 870 You can setup kernel memory limit to constrain these kinds of memory. For example, 871 every process consumes some stack pages. By limiting kernel memory, you can 872 prevent new processes from being created when the kernel memory usage is too high. 873 874 Kernel memory is never completely independent of user memory. Instead, you limit 875 kernel memory in the context of the user memory limit. Assume "U" is the user memory 876 limit and "K" the kernel limit. There are three possible ways to set limits: 877 878 <table> 879 <thead> 880 <tr> 881 <th>Option</th> 882 <th>Result</th> 883 </tr> 884 </thead> 885 <tbody> 886 <tr> 887 <td class="no-wrap"><strong>U != 0, K = inf</strong> (default)</td> 888 <td> 889 This is the standard memory limitation mechanism already present before using 890 kernel memory. Kernel memory is completely ignored. 891 </td> 892 </tr> 893 <tr> 894 <td class="no-wrap"><strong>U != 0, K < U</strong></td> 895 <td> 896 Kernel memory is a subset of the user memory. This setup is useful in 897 deployments where the total amount of memory per-cgroup is overcommitted. 898 Overcommitting kernel memory limits is definitely not recommended, since the 899 box can still run out of non-reclaimable memory. 900 In this case, you can configure K so that the sum of all groups is 901 never greater than the total memory. Then, freely set U at the expense of 902 the system's service quality. 903 </td> 904 </tr> 905 <tr> 906 <td class="no-wrap"><strong>U != 0, K > U</strong></td> 907 <td> 908 Since kernel memory charges are also fed to the user counter and reclamation 909 is triggered for the container for both kinds of memory. This configuration 910 gives the admin a unified view of memory. It is also useful for people 911 who just want to track kernel memory usage. 912 </td> 913 </tr> 914 </tbody> 915 </table> 916 917 Examples: 918 919 $ docker run -it -m 500M --kernel-memory 50M ubuntu:14.04 /bin/bash 920 921 We set memory and kernel memory, so the processes in the container can use 922 500M memory in total, in this 500M memory, it can be 50M kernel memory tops. 923 924 $ docker run -it --kernel-memory 50M ubuntu:14.04 /bin/bash 925 926 We set kernel memory without **-m**, so the processes in the container can 927 use as much memory as they want, but they can only use 50M kernel memory. 928 929 ### Swappiness constraint 930 931 By default, a container's kernel can swap out a percentage of anonymous pages. 932 To set this percentage for a container, specify a `--memory-swappiness` value 933 between 0 and 100. A value of 0 turns off anonymous page swapping. A value of 934 100 sets all anonymous pages as swappable. By default, if you are not using 935 `--memory-swappiness`, memory swappiness value will be inherited from the parent. 936 937 For example, you can set: 938 939 $ docker run -it --memory-swappiness=0 ubuntu:14.04 /bin/bash 940 941 Setting the `--memory-swappiness` option is helpful when you want to retain the 942 container's working set and to avoid swapping performance penalties. 943 944 ### CPU share constraint 945 946 By default, all containers get the same proportion of CPU cycles. This proportion 947 can be modified by changing the container's CPU share weighting relative 948 to the weighting of all other running containers. 949 950 To modify the proportion from the default of 1024, use the `-c` or `--cpu-shares` 951 flag to set the weighting to 2 or higher. If 0 is set, the system will ignore the 952 value and use the default of 1024. 953 954 The proportion will only apply when CPU-intensive processes are running. 955 When tasks in one container are idle, other containers can use the 956 left-over CPU time. The actual amount of CPU time will vary depending on 957 the number of containers running on the system. 958 959 For example, consider three containers, one has a cpu-share of 1024 and 960 two others have a cpu-share setting of 512. When processes in all three 961 containers attempt to use 100% of CPU, the first container would receive 962 50% of the total CPU time. If you add a fourth container with a cpu-share 963 of 1024, the first container only gets 33% of the CPU. The remaining containers 964 receive 16.5%, 16.5% and 33% of the CPU. 965 966 On a multi-core system, the shares of CPU time are distributed over all CPU 967 cores. Even if a container is limited to less than 100% of CPU time, it can 968 use 100% of each individual CPU core. 969 970 For example, consider a system with more than three cores. If you start one 971 container `{C0}` with `-c=512` running one process, and another container 972 `{C1}` with `-c=1024` running two processes, this can result in the following 973 division of CPU shares: 974 975 PID container CPU CPU share 976 100 {C0} 0 100% of CPU0 977 101 {C1} 1 100% of CPU1 978 102 {C1} 2 100% of CPU2 979 980 ### CPU period constraint 981 982 The default CPU CFS (Completely Fair Scheduler) period is 100ms. We can use 983 `--cpu-period` to set the period of CPUs to limit the container's CPU usage. 984 And usually `--cpu-period` should work with `--cpu-quota`. 985 986 Examples: 987 988 $ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash 989 990 If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms. 991 992 In addition to use `--cpu-period` and `--cpu-quota` for setting CPU period constraints, 993 it is possible to specify `--cpus` with a float number to achieve the same purpose. 994 For example, if there is 1 CPU, then `--cpus=0.5` will achieve the same result as 995 setting `--cpu-period=50000` and `--cpu-quota=25000` (50% CPU). 996 997 The default value for `--cpus` is `0.000`, which means there is no limit. 998 999 For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt). 1000 1001 ### Cpuset constraint 1002 1003 We can set cpus in which to allow execution for containers. 1004 1005 Examples: 1006 1007 $ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash 1008 1009 This means processes in container can be executed on cpu 1 and cpu 3. 1010 1011 $ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash 1012 1013 This means processes in container can be executed on cpu 0, cpu 1 and cpu 2. 1014 1015 We can set mems in which to allow execution for containers. Only effective 1016 on NUMA systems. 1017 1018 Examples: 1019 1020 $ docker run -it --cpuset-mems="1,3" ubuntu:14.04 /bin/bash 1021 1022 This example restricts the processes in the container to only use memory from 1023 memory nodes 1 and 3. 1024 1025 $ docker run -it --cpuset-mems="0-2" ubuntu:14.04 /bin/bash 1026 1027 This example restricts the processes in the container to only use memory from 1028 memory nodes 0, 1 and 2. 1029 1030 ### CPU quota constraint 1031 1032 The `--cpu-quota` flag limits the container's CPU usage. The default 0 value 1033 allows the container to take 100% of a CPU resource (1 CPU). The CFS (Completely Fair 1034 Scheduler) handles resource allocation for executing processes and is default 1035 Linux Scheduler used by the kernel. Set this value to 50000 to limit the container 1036 to 50% of a CPU resource. For multiple CPUs, adjust the `--cpu-quota` as necessary. 1037 For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt). 1038 1039 ### Block IO bandwidth (Blkio) constraint 1040 1041 By default, all containers get the same proportion of block IO bandwidth 1042 (blkio). This proportion is 500. To modify this proportion, change the 1043 container's blkio weight relative to the weighting of all other running 1044 containers using the `--blkio-weight` flag. 1045 1046 > **Note:** The blkio weight setting is only available for direct IO. Buffered IO 1047 > is not currently supported. 1048 1049 The `--blkio-weight` flag can set the weighting to a value between 10 to 1000. 1050 For example, the commands below create two containers with different blkio 1051 weight: 1052 1053 $ docker run -it --name c1 --blkio-weight 300 ubuntu:14.04 /bin/bash 1054 $ docker run -it --name c2 --blkio-weight 600 ubuntu:14.04 /bin/bash 1055 1056 If you do block IO in the two containers at the same time, by, for example: 1057 1058 $ time dd if=/mnt/zerofile of=test.out bs=1M count=1024 oflag=direct 1059 1060 You'll find that the proportion of time is the same as the proportion of blkio 1061 weights of the two containers. 1062 1063 The `--blkio-weight-device="DEVICE_NAME:WEIGHT"` flag sets a specific device weight. 1064 The `DEVICE_NAME:WEIGHT` is a string containing a colon-separated device name and weight. 1065 For example, to set `/dev/sda` device weight to `200`: 1066 1067 $ docker run -it \ 1068 --blkio-weight-device "/dev/sda:200" \ 1069 ubuntu 1070 1071 If you specify both the `--blkio-weight` and `--blkio-weight-device`, Docker 1072 uses the `--blkio-weight` as the default weight and uses `--blkio-weight-device` 1073 to override this default with a new value on a specific device. 1074 The following example uses a default weight of `300` and overrides this default 1075 on `/dev/sda` setting that weight to `200`: 1076 1077 $ docker run -it \ 1078 --blkio-weight 300 \ 1079 --blkio-weight-device "/dev/sda:200" \ 1080 ubuntu 1081 1082 The `--device-read-bps` flag limits the read rate (bytes per second) from a device. 1083 For example, this command creates a container and limits the read rate to `1mb` 1084 per second from `/dev/sda`: 1085 1086 $ docker run -it --device-read-bps /dev/sda:1mb ubuntu 1087 1088 The `--device-write-bps` flag limits the write rate (bytes per second) to a device. 1089 For example, this command creates a container and limits the write rate to `1mb` 1090 per second for `/dev/sda`: 1091 1092 $ docker run -it --device-write-bps /dev/sda:1mb ubuntu 1093 1094 Both flags take limits in the `<device-path>:<limit>[unit]` format. Both read 1095 and write rates must be a positive integer. You can specify the rate in `kb` 1096 (kilobytes), `mb` (megabytes), or `gb` (gigabytes). 1097 1098 The `--device-read-iops` flag limits read rate (IO per second) from a device. 1099 For example, this command creates a container and limits the read rate to 1100 `1000` IO per second from `/dev/sda`: 1101 1102 $ docker run -ti --device-read-iops /dev/sda:1000 ubuntu 1103 1104 The `--device-write-iops` flag limits write rate (IO per second) to a device. 1105 For example, this command creates a container and limits the write rate to 1106 `1000` IO per second to `/dev/sda`: 1107 1108 $ docker run -ti --device-write-iops /dev/sda:1000 ubuntu 1109 1110 Both flags take limits in the `<device-path>:<limit>` format. Both read and 1111 write rates must be a positive integer. 1112 1113 ## Additional groups 1114 --group-add: Add additional groups to run as 1115 1116 By default, the docker container process runs with the supplementary groups looked 1117 up for the specified user. If one wants to add more to that list of groups, then 1118 one can use this flag: 1119 1120 $ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id 1121 uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777 1122 1123 ## Runtime privilege and Linux capabilities 1124 1125 --cap-add: Add Linux capabilities 1126 --cap-drop: Drop Linux capabilities 1127 --privileged=false: Give extended privileges to this container 1128 --device=[]: Allows you to run devices inside the container without the --privileged flag. 1129 1130 By default, Docker containers are "unprivileged" and cannot, for 1131 example, run a Docker daemon inside a Docker container. This is because 1132 by default a container is not allowed to access any devices, but a 1133 "privileged" container is given access to all devices (see 1134 the documentation on [cgroups devices](https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt)). 1135 1136 When the operator executes `docker run --privileged`, Docker will enable 1137 access to all devices on the host as well as set some configuration 1138 in AppArmor or SELinux to allow the container nearly all the same access to the 1139 host as processes running outside containers on the host. Additional 1140 information about running with `--privileged` is available on the 1141 [Docker Blog](http://blog.docker.com/2013/09/docker-can-now-run-within-docker/). 1142 1143 If you want to limit access to a specific device or devices you can use 1144 the `--device` flag. It allows you to specify one or more devices that 1145 will be accessible within the container. 1146 1147 $ docker run --device=/dev/snd:/dev/snd ... 1148 1149 By default, the container will be able to `read`, `write`, and `mknod` these devices. 1150 This can be overridden using a third `:rwm` set of options to each `--device` flag: 1151 1152 $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc 1153 1154 Command (m for help): q 1155 $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc 1156 You will not be able to write the partition table. 1157 1158 Command (m for help): q 1159 1160 $ docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc 1161 crash.... 1162 1163 $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc 1164 fdisk: unable to open /dev/xvdc: Operation not permitted 1165 1166 In addition to `--privileged`, the operator can have fine grain control over the 1167 capabilities using `--cap-add` and `--cap-drop`. By default, Docker has a default 1168 list of capabilities that are kept. The following table lists the Linux capability 1169 options which are allowed by default and can be dropped. 1170 1171 | Capability Key | Capability Description | 1172 |:-----------------|:------------------------------------------------------------------------------------------------------------------------------| 1173 | SETPCAP | Modify process capabilities. | 1174 | MKNOD | Create special files using mknod(2). | 1175 | AUDIT_WRITE | Write records to kernel auditing log. | 1176 | CHOWN | Make arbitrary changes to file UIDs and GIDs (see chown(2)). | 1177 | NET_RAW | Use RAW and PACKET sockets. | 1178 | DAC_OVERRIDE | Bypass file read, write, and execute permission checks. | 1179 | FOWNER | Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. | 1180 | FSETID | Don't clear set-user-ID and set-group-ID permission bits when a file is modified. | 1181 | KILL | Bypass permission checks for sending signals. | 1182 | SETGID | Make arbitrary manipulations of process GIDs and supplementary GID list. | 1183 | SETUID | Make arbitrary manipulations of process UIDs. | 1184 | NET_BIND_SERVICE | Bind a socket to internet domain privileged ports (port numbers less than 1024). | 1185 | SYS_CHROOT | Use chroot(2), change root directory. | 1186 | SETFCAP | Set file capabilities. | 1187 1188 The next table shows the capabilities which are not granted by default and may be added. 1189 1190 | Capability Key | Capability Description | 1191 |:----------------|:----------------------------------------------------------------------------------------------------------------| 1192 | SYS_MODULE | Load and unload kernel modules. | 1193 | SYS_RAWIO | Perform I/O port operations (iopl(2) and ioperm(2)). | 1194 | SYS_PACCT | Use acct(2), switch process accounting on or off. | 1195 | SYS_ADMIN | Perform a range of system administration operations. | 1196 | SYS_NICE | Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. | 1197 | SYS_RESOURCE | Override resource Limits. | 1198 | SYS_TIME | Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. | 1199 | SYS_TTY_CONFIG | Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. | 1200 | AUDIT_CONTROL | Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. | 1201 | MAC_ADMIN | Allow MAC configuration or state changes. Implemented for the Smack LSM. | 1202 | MAC_OVERRIDE | Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). | 1203 | NET_ADMIN | Perform various network-related operations. | 1204 | SYSLOG | Perform privileged syslog(2) operations. | 1205 | DAC_READ_SEARCH | Bypass file read permission checks and directory read and execute permission checks. | 1206 | LINUX_IMMUTABLE | Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. | 1207 | NET_BROADCAST | Make socket broadcasts, and listen to multicasts. | 1208 | IPC_LOCK | Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). | 1209 | IPC_OWNER | Bypass permission checks for operations on System V IPC objects. | 1210 | SYS_PTRACE | Trace arbitrary processes using ptrace(2). | 1211 | SYS_BOOT | Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. | 1212 | LEASE | Establish leases on arbitrary files (see fcntl(2)). | 1213 | WAKE_ALARM | Trigger something that will wake up the system. | 1214 | BLOCK_SUSPEND | Employ features that can block system suspend. | 1215 1216 Further reference information is available on the [capabilities(7) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html) 1217 1218 Both flags support the value `ALL`, so if the 1219 operator wants to have all capabilities but `MKNOD` they could use: 1220 1221 $ docker run --cap-add=ALL --cap-drop=MKNOD ... 1222 1223 For interacting with the network stack, instead of using `--privileged` they 1224 should use `--cap-add=NET_ADMIN` to modify the network interfaces. 1225 1226 $ docker run -it --rm ubuntu:14.04 ip link add dummy0 type dummy 1227 RTNETLINK answers: Operation not permitted 1228 $ docker run -it --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add dummy0 type dummy 1229 1230 To mount a FUSE based filesystem, you need to combine both `--cap-add` and 1231 `--device`: 1232 1233 $ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs sven@10.10.10.20:/home/sven /mnt 1234 fuse: failed to open /dev/fuse: Operation not permitted 1235 $ docker run --rm -it --device /dev/fuse sshfs sshfs sven@10.10.10.20:/home/sven /mnt 1236 fusermount: mount failed: Operation not permitted 1237 $ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs 1238 # sshfs sven@10.10.10.20:/home/sven /mnt 1239 The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established. 1240 ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6. 1241 Are you sure you want to continue connecting (yes/no)? yes 1242 sven@10.10.10.20's password: 1243 root@30aa0cfaf1b5:/# ls -la /mnt/src/docker 1244 total 1516 1245 drwxrwxr-x 1 1000 1000 4096 Dec 4 06:08 . 1246 drwxrwxr-x 1 1000 1000 4096 Dec 4 11:46 .. 1247 -rw-rw-r-- 1 1000 1000 16 Oct 8 00:09 .dockerignore 1248 -rwxrwxr-x 1 1000 1000 464 Oct 8 00:09 .drone.yml 1249 drwxrwxr-x 1 1000 1000 4096 Dec 4 06:11 .git 1250 -rw-rw-r-- 1 1000 1000 461 Dec 4 06:08 .gitignore 1251 .... 1252 1253 The default seccomp profile will adjust to the selected capabilities, in order to allow 1254 use of facilities allowed by the capabilities, so you should not have to adjust this, 1255 since Docker 1.12. In Docker 1.10 and 1.11 this did not happen and it may be necessary 1256 to use a custom seccomp profile or use `--security-opt seccomp=unconfined` when adding 1257 capabilities. 1258 1259 ## Logging drivers (--log-driver) 1260 1261 The container can have a different logging driver than the Docker daemon. Use 1262 the `--log-driver=VALUE` with the `docker run` command to configure the 1263 container's logging driver. The following options are supported: 1264 1265 | Driver | Description | 1266 |:------------|:------------------------------------------------------------------------------------------------------------------------------| 1267 | `none` | Disables any logging for the container. `docker logs` won't be available with this driver. | 1268 | `json-file` | Default logging driver for Docker. Writes JSON messages to file. No logging options are supported for this driver. | 1269 | `syslog` | Syslog logging driver for Docker. Writes log messages to syslog. | 1270 | `journald` | Journald logging driver for Docker. Writes log messages to `journald`. | 1271 | `gelf` | Graylog Extended Log Format (GELF) logging driver for Docker. Writes log messages to a GELF endpoint likeGraylog or Logstash. | 1272 | `fluentd` | Fluentd logging driver for Docker. Writes log messages to `fluentd` (forward input). | 1273 | `awslogs` | Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs | 1274 | `splunk` | Splunk logging driver for Docker. Writes log messages to `splunk` using Event Http Collector. | 1275 1276 The `docker logs` command is available only for the `json-file` and `journald` 1277 logging drivers. For detailed information on working with logging drivers, see 1278 [Configure logging drivers](https://docs.docker.com/config/containers/logging/configure/). 1279 1280 1281 ## Overriding Dockerfile image defaults 1282 1283 When a developer builds an image from a [*Dockerfile*](builder.md) 1284 or when she commits it, the developer can set a number of default parameters 1285 that take effect when the image starts up as a container. 1286 1287 Four of the Dockerfile commands cannot be overridden at runtime: `FROM`, 1288 `MAINTAINER`, `RUN`, and `ADD`. Everything else has a corresponding override 1289 in `docker run`. We'll go through what the developer might have set in each 1290 Dockerfile instruction and how the operator can override that setting. 1291 1292 - [CMD (Default Command or Options)](#cmd-default-command-or-options) 1293 - [ENTRYPOINT (Default Command to Execute at Runtime)]( 1294 #entrypoint-default-command-to-execute-at-runtime) 1295 - [EXPOSE (Incoming Ports)](#expose-incoming-ports) 1296 - [ENV (Environment Variables)](#env-environment-variables) 1297 - [HEALTHCHECK](#healthcheck) 1298 - [VOLUME (Shared Filesystems)](#volume-shared-filesystems) 1299 - [USER](#user) 1300 - [WORKDIR](#workdir) 1301 1302 ### CMD (default command or options) 1303 1304 Recall the optional `COMMAND` in the Docker 1305 commandline: 1306 1307 $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 1308 1309 This command is optional because the person who created the `IMAGE` may 1310 have already provided a default `COMMAND` using the Dockerfile `CMD` 1311 instruction. As the operator (the person running a container from the 1312 image), you can override that `CMD` instruction just by specifying a new 1313 `COMMAND`. 1314 1315 If the image also specifies an `ENTRYPOINT` then the `CMD` or `COMMAND` 1316 get appended as arguments to the `ENTRYPOINT`. 1317 1318 ### ENTRYPOINT (default command to execute at runtime) 1319 1320 --entrypoint="": Overwrite the default entrypoint set by the image 1321 1322 The `ENTRYPOINT` of an image is similar to a `COMMAND` because it 1323 specifies what executable to run when the container starts, but it is 1324 (purposely) more difficult to override. The `ENTRYPOINT` gives a 1325 container its default nature or behavior, so that when you set an 1326 `ENTRYPOINT` you can run the container *as if it were that binary*, 1327 complete with default options, and you can pass in more options via the 1328 `COMMAND`. But, sometimes an operator may want to run something else 1329 inside the container, so you can override the default `ENTRYPOINT` at 1330 runtime by using a string to specify the new `ENTRYPOINT`. Here is an 1331 example of how to run a shell in a container that has been set up to 1332 automatically run something else (like `/usr/bin/redis-server`): 1333 1334 $ docker run -it --entrypoint /bin/bash example/redis 1335 1336 or two examples of how to pass more parameters to that ENTRYPOINT: 1337 1338 $ docker run -it --entrypoint /bin/bash example/redis -c ls -l 1339 $ docker run -it --entrypoint /usr/bin/redis-cli example/redis --help 1340 1341 You can reset a containers entrypoint by passing an empty string, for example: 1342 1343 $ docker run -it --entrypoint="" mysql bash 1344 1345 > **Note**: Passing `--entrypoint` will clear out any default command set on the 1346 > image (i.e. any `CMD` instruction in the Dockerfile used to build it). 1347 1348 ### EXPOSE (incoming ports) 1349 1350 The following `run` command options work with container networking: 1351 1352 --expose=[]: Expose a port or a range of ports inside the container. 1353 These are additional to those exposed by the `EXPOSE` instruction 1354 -P : Publish all exposed ports to the host interfaces 1355 -p=[] : Publish a container's port or a range of ports to the host 1356 format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort 1357 Both hostPort and containerPort can be specified as a 1358 range of ports. When specifying ranges for both, the 1359 number of container ports in the range must match the 1360 number of host ports in the range, for example: 1361 -p 1234-1236:1234-1236/tcp 1362 1363 When specifying a range for hostPort only, the 1364 containerPort must not be a range. In this case the 1365 container port is published somewhere within the 1366 specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`) 1367 1368 (use 'docker port' to see the actual mapping) 1369 1370 --link="" : Add link to another container (<name or id>:alias or <name or id>) 1371 1372 With the exception of the `EXPOSE` directive, an image developer hasn't 1373 got much control over networking. The `EXPOSE` instruction defines the 1374 initial incoming ports that provide services. These ports are available 1375 to processes inside the container. An operator can use the `--expose` 1376 option to add to the exposed ports. 1377 1378 To expose a container's internal port, an operator can start the 1379 container with the `-P` or `-p` flag. The exposed port is accessible on 1380 the host and the ports are available to any client that can reach the 1381 host. 1382 1383 The `-P` option publishes all the ports to the host interfaces. Docker 1384 binds each exposed port to a random port on the host. The range of 1385 ports are within an *ephemeral port range* defined by 1386 `/proc/sys/net/ipv4/ip_local_port_range`. Use the `-p` flag to 1387 explicitly map a single port or range of ports. 1388 1389 The port number inside the container (where the service listens) does 1390 not need to match the port number exposed on the outside of the 1391 container (where clients connect). For example, inside the container an 1392 HTTP service is listening on port 80 (and so the image developer 1393 specifies `EXPOSE 80` in the Dockerfile). At runtime, the port might be 1394 bound to 42800 on the host. To find the mapping between the host ports 1395 and the exposed ports, use `docker port`. 1396 1397 If the operator uses `--link` when starting a new client container in the 1398 default bridge network, then the client container can access the exposed 1399 port via a private networking interface. 1400 If `--link` is used when starting a container in a user-defined network as 1401 described in [*Networking overview*](https://docs.docker.com/network/), 1402 it will provide a named alias for the container being linked to. 1403 1404 ### ENV (environment variables) 1405 1406 Docker automatically sets some environment variables when creating a Linux 1407 container. Docker does not set any environment variables when creating a Windows 1408 container. 1409 1410 The following environment variables are set for Linux containers: 1411 1412 | Variable | Value | 1413 |:-----------|:-----------------------------------------------------------------------------------------------------| 1414 | `HOME` | Set based on the value of `USER` | 1415 | `HOSTNAME` | The hostname associated with the container | 1416 | `PATH` | Includes popular directories, such as `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin` | 1417 | `TERM` | `xterm` if the container is allocated a pseudo-TTY | 1418 1419 1420 Additionally, the operator can **set any environment variable** in the 1421 container by using one or more `-e` flags, even overriding those mentioned 1422 above, or already defined by the developer with a Dockerfile `ENV`. If the 1423 operator names an environment variable without specifying a value, then the 1424 current value of the named variable is propagated into the container's environment: 1425 1426 ```bash 1427 $ export today=Wednesday 1428 $ docker run -e "deep=purple" -e today --rm alpine env 1429 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 1430 HOSTNAME=d2219b854598 1431 deep=purple 1432 today=Wednesday 1433 HOME=/root 1434 ``` 1435 1436 ```PowerShell 1437 PS C:\> docker run --rm -e "foo=bar" microsoft/nanoserver cmd /s /c set 1438 ALLUSERSPROFILE=C:\ProgramData 1439 APPDATA=C:\Users\ContainerAdministrator\AppData\Roaming 1440 CommonProgramFiles=C:\Program Files\Common Files 1441 CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files 1442 CommonProgramW6432=C:\Program Files\Common Files 1443 COMPUTERNAME=C2FAEFCC8253 1444 ComSpec=C:\Windows\system32\cmd.exe 1445 foo=bar 1446 LOCALAPPDATA=C:\Users\ContainerAdministrator\AppData\Local 1447 NUMBER_OF_PROCESSORS=8 1448 OS=Windows_NT 1449 Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\ContainerAdministrator\AppData\Local\Microsoft\WindowsApps 1450 PATHEXT=.COM;.EXE;.BAT;.CMD 1451 PROCESSOR_ARCHITECTURE=AMD64 1452 PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 62 Stepping 4, GenuineIntel 1453 PROCESSOR_LEVEL=6 1454 PROCESSOR_REVISION=3e04 1455 ProgramData=C:\ProgramData 1456 ProgramFiles=C:\Program Files 1457 ProgramFiles(x86)=C:\Program Files (x86) 1458 ProgramW6432=C:\Program Files 1459 PROMPT=$P$G 1460 PUBLIC=C:\Users\Public 1461 SystemDrive=C: 1462 SystemRoot=C:\Windows 1463 TEMP=C:\Users\ContainerAdministrator\AppData\Local\Temp 1464 TMP=C:\Users\ContainerAdministrator\AppData\Local\Temp 1465 USERDOMAIN=User Manager 1466 USERNAME=ContainerAdministrator 1467 USERPROFILE=C:\Users\ContainerAdministrator 1468 windir=C:\Windows 1469 ``` 1470 1471 Similarly the operator can set the **HOSTNAME** (Linux) or **COMPUTERNAME** (Windows) with `-h`. 1472 1473 ### HEALTHCHECK 1474 1475 ``` 1476 --health-cmd Command to run to check health 1477 --health-interval Time between running the check 1478 --health-retries Consecutive failures needed to report unhealthy 1479 --health-timeout Maximum time to allow one check to run 1480 --health-start-period Start period for the container to initialize before starting health-retries countdown 1481 --no-healthcheck Disable any container-specified HEALTHCHECK 1482 ``` 1483 1484 Example: 1485 1486 {% raw %} 1487 $ docker run --name=test -d \ 1488 --health-cmd='stat /etc/passwd || exit 1' \ 1489 --health-interval=2s \ 1490 busybox sleep 1d 1491 $ sleep 2; docker inspect --format='{{.State.Health.Status}}' test 1492 healthy 1493 $ docker exec test rm /etc/passwd 1494 $ sleep 2; docker inspect --format='{{json .State.Health}}' test 1495 { 1496 "Status": "unhealthy", 1497 "FailingStreak": 3, 1498 "Log": [ 1499 { 1500 "Start": "2016-05-25T17:22:04.635478668Z", 1501 "End": "2016-05-25T17:22:04.7272552Z", 1502 "ExitCode": 0, 1503 "Output": " File: /etc/passwd\n Size: 334 \tBlocks: 8 IO Block: 4096 regular file\nDevice: 32h/50d\tInode: 12 Links: 1\nAccess: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..." 1504 }, 1505 { 1506 "Start": "2016-05-25T17:22:06.732900633Z", 1507 "End": "2016-05-25T17:22:06.822168935Z", 1508 "ExitCode": 0, 1509 "Output": " File: /etc/passwd\n Size: 334 \tBlocks: 8 IO Block: 4096 regular file\nDevice: 32h/50d\tInode: 12 Links: 1\nAccess: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..." 1510 }, 1511 { 1512 "Start": "2016-05-25T17:22:08.823956535Z", 1513 "End": "2016-05-25T17:22:08.897359124Z", 1514 "ExitCode": 1, 1515 "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" 1516 }, 1517 { 1518 "Start": "2016-05-25T17:22:10.898802931Z", 1519 "End": "2016-05-25T17:22:10.969631866Z", 1520 "ExitCode": 1, 1521 "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" 1522 }, 1523 { 1524 "Start": "2016-05-25T17:22:12.971033523Z", 1525 "End": "2016-05-25T17:22:13.082015516Z", 1526 "ExitCode": 1, 1527 "Output": "stat: can't stat '/etc/passwd': No such file or directory\n" 1528 } 1529 ] 1530 } 1531 {% endraw %} 1532 1533 The health status is also displayed in the `docker ps` output. 1534 1535 ### TMPFS (mount tmpfs filesystems) 1536 1537 ```bash 1538 --tmpfs=[]: Create a tmpfs mount with: container-dir[:<options>], 1539 where the options are identical to the Linux 1540 'mount -t tmpfs -o' command. 1541 ``` 1542 1543 The example below mounts an empty tmpfs into the container with the `rw`, 1544 `noexec`, `nosuid`, and `size=65536k` options. 1545 1546 $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image 1547 1548 ### VOLUME (shared filesystems) 1549 1550 -v, --volume=[host-src:]container-dest[:<options>]: Bind mount a volume. 1551 The comma-delimited `options` are [rw|ro], [z|Z], 1552 [[r]shared|[r]slave|[r]private], and [nocopy]. 1553 The 'host-src' is an absolute path or a name value. 1554 1555 If neither 'rw' or 'ro' is specified then the volume is mounted in 1556 read-write mode. 1557 1558 The `nocopy` modes is used to disable automatic copying requested volume 1559 path in the container to the volume storage location. 1560 For named volumes, `copy` is the default mode. Copy modes are not supported 1561 for bind-mounted volumes. 1562 1563 --volumes-from="": Mount all volumes from the given container(s) 1564 1565 > **Note**: 1566 > When using systemd to manage the Docker daemon's start and stop, in the systemd 1567 > unit file there is an option to control mount propagation for the Docker daemon 1568 > itself, called `MountFlags`. The value of this setting may cause Docker to not 1569 > see mount propagation changes made on the mount point. For example, if this value 1570 > is `slave`, you may not be able to use the `shared` or `rshared` propagation on 1571 > a volume. 1572 1573 The volumes commands are complex enough to have their own documentation 1574 in section [*Use volumes*](https://docs.docker.com/storage/volumes/). A developer can define 1575 one or more `VOLUME`'s associated with an image, but only the operator 1576 can give access from one container to another (or from a container to a 1577 volume mounted on the host). 1578 1579 The `container-dest` must always be an absolute path such as `/src/docs`. 1580 The `host-src` can either be an absolute path or a `name` value. If you 1581 supply an absolute path for the `host-dir`, Docker bind-mounts to the path 1582 you specify. If you supply a `name`, Docker creates a named volume by that `name`. 1583 1584 A `name` value must start with an alphanumeric character, 1585 followed by `a-z0-9`, `_` (underscore), `.` (period) or `-` (hyphen). 1586 An absolute path starts with a `/` (forward slash). 1587 1588 For example, you can specify either `/foo` or `foo` for a `host-src` value. 1589 If you supply the `/foo` value, Docker creates a bind mount. If you supply 1590 the `foo` specification, Docker creates a named volume. 1591 1592 ### USER 1593 1594 `root` (id = 0) is the default user within a container. The image developer can 1595 create additional users. Those users are accessible by name. When passing a numeric 1596 ID, the user does not have to exist in the container. 1597 1598 The developer can set a default user to run the first process with the 1599 Dockerfile `USER` instruction. When starting a container, the operator can override 1600 the `USER` instruction by passing the `-u` option. 1601 1602 -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command. 1603 1604 The followings examples are all valid: 1605 --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ] 1606 1607 > **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647. 1608 1609 ### WORKDIR 1610 1611 The default working directory for running binaries within a container is the 1612 root directory (`/`), but the developer can set a different default with the 1613 Dockerfile `WORKDIR` command. The operator can override this with: 1614 1615 -w="": Working directory inside the container