github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/docs/reference/commandline/run.md (about) 1 <!--[metadata]> 2 +++ 3 title = "run" 4 description = "The run command description and usage" 5 keywords = ["run, command, container"] 6 [menu.main] 7 parent = "smn_cli" 8 +++ 9 <![end-metadata]--> 10 11 # run 12 13 Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 14 15 Run a command in a new container 16 17 -a, --attach=[] Attach to STDIN, STDOUT or STDERR 18 --add-host=[] Add a custom host-to-IP mapping (host:ip) 19 --blkio-weight=0 Block IO weight (relative weight) 20 --blkio-weight-device=[] Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`) 21 --cpu-shares=0 CPU shares (relative weight) 22 --cap-add=[] Add Linux capabilities 23 --cap-drop=[] Drop Linux capabilities 24 --cgroup-parent="" Optional parent cgroup for the container 25 --cidfile="" Write the container ID to the file 26 --cpu-period=0 Limit CPU CFS (Completely Fair Scheduler) period 27 --cpu-quota=0 Limit CPU CFS (Completely Fair Scheduler) quota 28 --cpuset-cpus="" CPUs in which to allow execution (0-3, 0,1) 29 --cpuset-mems="" Memory nodes (MEMs) in which to allow execution (0-3, 0,1) 30 -d, --detach Run container in background and print container ID 31 --detach-keys Specify the escape key sequence used to detach a container 32 --device=[] Add a host device to the container 33 --device-read-bps=[] Limit read rate (bytes per second) from a device (e.g., --device-read-bps=/dev/sda:1mb) 34 --device-read-iops=[] Limit read rate (IO per second) from a device (e.g., --device-read-iops=/dev/sda:1000) 35 --device-write-bps=[] Limit write rate (bytes per second) to a device (e.g., --device-write-bps=/dev/sda:1mb) 36 --device-write-iops=[] Limit write rate (IO per second) to a device (e.g., --device-write-bps=/dev/sda:1000) 37 --disable-content-trust=true Skip image verification 38 --dns=[] Set custom DNS servers 39 --dns-opt=[] Set custom DNS options 40 --dns-search=[] Set custom DNS search domains 41 -e, --env=[] Set environment variables 42 --entrypoint="" Overwrite the default ENTRYPOINT of the image 43 --env-file=[] Read in a file of environment variables 44 --expose=[] Expose a port or a range of ports 45 --group-add=[] Add additional groups to run as 46 -h, --hostname="" Container host name 47 --help Print usage 48 -i, --interactive Keep STDIN open even if not attached 49 --ip="" Container IPv4 address (e.g. 172.30.100.104) 50 --ip6="" Container IPv6 address (e.g. 2001:db8::33) 51 --ipc="" IPC namespace to use 52 --isolation="" Container isolation technology 53 --kernel-memory="" Kernel memory limit 54 -l, --label=[] Set metadata on the container (e.g., --label=com.example.key=value) 55 --label-file=[] Read in a file of labels (EOL delimited) 56 --link=[] Add link to another container 57 --log-driver="" Logging driver for container 58 --log-opt=[] Log driver specific options 59 -m, --memory="" Memory limit 60 --mac-address="" Container MAC address (e.g. 92:d0:c6:0a:29:33) 61 --memory-reservation="" Memory soft limit 62 --memory-swap="" A positive integer equal to memory plus swap. Specify -1 to enable unlimited swap. 63 --memory-swappiness="" Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. 64 --name="" Assign a name to the container 65 --net="bridge" Connect a container to a network 66 'bridge': create a network stack on the default Docker bridge 67 'none': no networking 68 'container:<name|id>': reuse another container's network stack 69 'host': use the Docker host network stack 70 '<network-name>|<network-id>': connect to a user-defined network 71 --net-alias=[] Add network-scoped alias for the container 72 --oom-kill-disable Whether to disable OOM Killer for the container or not 73 --oom-score-adj=0 Tune the host's OOM preferences for containers (accepts -1000 to 1000) 74 -P, --publish-all Publish all exposed ports to random ports 75 -p, --publish=[] Publish a container's port(s) to the host 76 --pid="" PID namespace to use 77 --pids-limit=-1 Tune container pids limit (set -1 for unlimited), kernel >= 4.3 78 --privileged Give extended privileges to this container 79 --read-only Mount the container's root filesystem as read only 80 --restart="no" Restart policy (no, on-failure[:max-retry], always, unless-stopped) 81 --rm Automatically remove the container when it exits 82 --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`. 83 --security-opt=[] Security Options 84 --sig-proxy=true Proxy received signals to the process 85 --stop-signal="SIGTERM" Signal to stop a container 86 --storage-opt=[] Set storage driver options per container 87 --sysctl[=*[]*]] Configure namespaced kernel parameters at runtime 88 -t, --tty Allocate a pseudo-TTY 89 -u, --user="" Username or UID (format: <name|uid>[:<group|gid>]) 90 --userns="" Container user namespace 91 'host': Use the Docker host user namespace 92 '': Use the Docker daemon user namespace specified by `--userns-remap` option. 93 --ulimit=[] Ulimit options 94 --uts="" UTS namespace to use 95 -v, --volume=[host-src:]container-dest[:<options>] 96 Bind mount a volume. The comma-delimited 97 `options` are [rw|ro], [z|Z], 98 [[r]shared|[r]slave|[r]private], and 99 [nocopy]. The 'host-src' is an absolute path 100 or a name value. 101 --volume-driver="" Container's volume driver 102 --volumes-from=[] Mount volumes from the specified container(s) 103 -w, --workdir="" Working directory inside the container 104 105 The `docker run` command first `creates` a writeable container layer over the 106 specified image, and then `starts` it using the specified command. That is, 107 `docker run` is equivalent to the API `/containers/create` then 108 `/containers/(id)/start`. A stopped container can be restarted with all its 109 previous changes intact using `docker start`. See `docker ps -a` to view a list 110 of all containers. 111 112 The `docker run` command can be used in combination with `docker commit` to 113 [*change the command that a container runs*](commit.md). There is additional detailed information about `docker run` in the [Docker run reference](../run.md). 114 115 For information on connecting a container to a network, see the ["*Docker network overview*"](../../userguide/networking/index.md). 116 117 ## Examples 118 119 ### Assign name and allocate pseudo-TTY (--name, -it) 120 121 $ docker run --name test -it debian 122 root@d6c0fe130dba:/# exit 13 123 $ echo $? 124 13 125 $ docker ps -a | grep test 126 d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test 127 128 This example runs a container named `test` using the `debian:latest` 129 image. The `-it` instructs Docker to allocate a pseudo-TTY connected to 130 the container's stdin; creating an interactive `bash` shell in the container. 131 In the example, the `bash` shell is quit by entering 132 `exit 13`. This exit code is passed on to the caller of 133 `docker run`, and is recorded in the `test` container's metadata. 134 135 ### Capture container ID (--cidfile) 136 137 $ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test" 138 139 This will create a container and print `test` to the console. The `cidfile` 140 flag makes Docker attempt to create a new file and write the container ID to it. 141 If the file exists already, Docker will return an error. Docker will close this 142 file when `docker run` exits. 143 144 ### Full container capabilities (--privileged) 145 146 $ docker run -t -i --rm ubuntu bash 147 root@bc338942ef20:/# mount -t tmpfs none /mnt 148 mount: permission denied 149 150 This will *not* work, because by default, most potentially dangerous kernel 151 capabilities are dropped; including `cap_sys_admin` (which is required to mount 152 filesystems). However, the `--privileged` flag will allow it to run: 153 154 $ docker run -t -i --privileged ubuntu bash 155 root@50e3f57e16e6:/# mount -t tmpfs none /mnt 156 root@50e3f57e16e6:/# df -h 157 Filesystem Size Used Avail Use% Mounted on 158 none 1.9G 0 1.9G 0% /mnt 159 160 The `--privileged` flag gives *all* capabilities to the container, and it also 161 lifts all the limitations enforced by the `device` cgroup controller. In other 162 words, the container can then do almost everything that the host can do. This 163 flag exists to allow special use-cases, like running Docker within Docker. 164 165 ### Set working directory (-w) 166 167 $ docker run -w /path/to/dir/ -i -t ubuntu pwd 168 169 The `-w` lets the command being executed inside directory given, here 170 `/path/to/dir/`. If the path does not exists it is created inside the container. 171 172 ### Set storage driver options per container 173 174 $ docker create -it --storage-opt size=120G fedora /bin/bash 175 176 This (size) will allow to set the container rootfs size to 120G at creation time. 177 User cannot pass a size less than the Default BaseFS Size. 178 179 ### Mount tmpfs (--tmpfs) 180 181 $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image 182 183 The `--tmpfs` flag mounts an empty tmpfs into the container with the `rw`, 184 `noexec`, `nosuid`, `size=65536k` options. 185 186 ### Mount volume (-v, --read-only) 187 188 $ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd 189 190 The `-v` flag mounts the current working directory into the container. The `-w` 191 lets the command being executed inside the current working directory, by 192 changing into the directory to the value returned by `pwd`. So this 193 combination executes the command using the container, but inside the 194 current working directory. 195 196 $ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash 197 198 When the host directory of a bind-mounted volume doesn't exist, Docker 199 will automatically create this directory on the host for you. In the 200 example above, Docker will create the `/doesnt/exist` 201 folder before starting your container. 202 203 $ docker run --read-only -v /icanwrite busybox touch /icanwrite here 204 205 Volumes can be used in combination with `--read-only` to control where 206 a container writes files. The `--read-only` flag mounts the container's root 207 filesystem as read only prohibiting writes to locations other than the 208 specified volumes for the container. 209 210 $ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh 211 212 By bind-mounting the docker unix socket and statically linked docker 213 binary (refer to [get the linux binary]( 214 ../../installation/binaries.md#get-the-linux-binary)), 215 you give the container the full access to create and manipulate the host's 216 Docker daemon. 217 218 ### Publish or expose port (-p, --expose) 219 220 $ docker run -p 127.0.0.1:80:8080 ubuntu bash 221 222 This binds port `8080` of the container to port `80` on `127.0.0.1` of the host 223 machine. The [Docker User 224 Guide](../../userguide/networking/default_network/dockerlinks.md) 225 explains in detail how to manipulate ports in Docker. 226 227 $ docker run --expose 80 ubuntu bash 228 229 This exposes port `80` of the container without publishing the port to the host 230 system's interfaces. 231 232 ### Set environment variables (-e, --env, --env-file) 233 234 $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash 235 236 This sets simple (non-array) environmental variables in the container. For 237 illustration all three 238 flags are shown here. Where `-e`, `--env` take an environment variable and 239 value, or if no `=` is provided, then that variable's current value is passed 240 through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` in the container). 241 When no `=` is provided and that variable is not defined in the client's 242 environment then that variable will be removed from the container's list of 243 environment variables. 244 All three flags, `-e`, `--env` and `--env-file` can be repeated. 245 246 Regardless of the order of these three flags, the `--env-file` are processed 247 first, and then `-e`, `--env` flags. This way, the `-e` or `--env` will 248 override variables as needed. 249 250 $ cat ./env.list 251 TEST_FOO=BAR 252 $ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO 253 TEST_FOO=This is a test 254 255 The `--env-file` flag takes a filename as an argument and expects each line 256 to be in the `VAR=VAL` format, mimicking the argument passed to `--env`. Comment 257 lines need only be prefixed with `#` 258 259 An example of a file passed with `--env-file` 260 261 $ cat ./env.list 262 TEST_FOO=BAR 263 264 # this is a comment 265 TEST_APP_DEST_HOST=10.10.0.127 266 TEST_APP_DEST_PORT=8888 267 _TEST_BAR=FOO 268 TEST_APP_42=magic 269 helloWorld=true 270 123qwe=bar 271 org.spring.config=something 272 273 # pass through this variable from the caller 274 TEST_PASSTHROUGH 275 $ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env 276 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 277 HOSTNAME=5198e0745561 278 TEST_FOO=BAR 279 TEST_APP_DEST_HOST=10.10.0.127 280 TEST_APP_DEST_PORT=8888 281 _TEST_BAR=FOO 282 TEST_APP_42=magic 283 helloWorld=true 284 TEST_PASSTHROUGH=howdy 285 HOME=/root 286 123qwe=bar 287 org.spring.config=something 288 289 $ docker run --env-file ./env.list busybox env 290 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 291 HOSTNAME=5198e0745561 292 TEST_FOO=BAR 293 TEST_APP_DEST_HOST=10.10.0.127 294 TEST_APP_DEST_PORT=8888 295 _TEST_BAR=FOO 296 TEST_APP_42=magic 297 helloWorld=true 298 TEST_PASSTHROUGH= 299 HOME=/root 300 123qwe=bar 301 org.spring.config=something 302 303 ### Set metadata on container (-l, --label, --label-file) 304 305 A label is a `key=value` pair that applies metadata to a container. To label a container with two labels: 306 307 $ docker run -l my-label --label com.example.foo=bar ubuntu bash 308 309 The `my-label` key doesn't specify a value so the label defaults to an empty 310 string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). 311 312 The `key=value` must be unique to avoid overwriting the label value. If you 313 specify labels with identical keys but different values, each subsequent value 314 overwrites the previous. Docker uses the last `key=value` you supply. 315 316 Use the `--label-file` flag to load multiple labels from a file. Delimit each 317 label in the file with an EOL mark. The example below loads labels from a 318 labels file in the current directory: 319 320 $ docker run --label-file ./labels ubuntu bash 321 322 The label-file format is similar to the format for loading environment 323 variables. (Unlike environment variables, labels are not visible to processes 324 running inside a container.) The following example illustrates a label-file 325 format: 326 327 com.example.label1="a label" 328 329 # this is a comment 330 com.example.label2=another\ label 331 com.example.label3 332 333 You can load multiple label-files by supplying multiple `--label-file` flags. 334 335 For additional information on working with labels, see [*Labels - custom 336 metadata in Docker*](../../userguide/labels-custom-metadata.md) in the Docker User 337 Guide. 338 339 ### Connect a container to a network (--net) 340 341 When you start a container use the `--net` flag to connect it to a network. 342 This adds the `busybox` container to the `my-net` network. 343 344 ```bash 345 $ docker run -itd --net=my-net busybox 346 ``` 347 348 You can also choose the IP addresses for the container with `--ip` and `--ip6` 349 flags when you start the container on a user-defined network. 350 351 ```bash 352 $ docker run -itd --net=my-net --ip=10.10.9.75 busybox 353 ``` 354 355 If you want to add a running container to a network use the `docker network connect` subcommand. 356 357 You can connect multiple containers to the same network. Once connected, the 358 containers can communicate easily need only another container's IP address 359 or name. For `overlay` networks or custom plugins that support multi-host 360 connectivity, containers connected to the same multi-host network but launched 361 from different Engines can also communicate in this way. 362 363 **Note**: Service discovery is unavailable on the default bridge network. 364 Containers can communicate via their IP addresses by default. To communicate 365 by name, they must be linked. 366 367 You can disconnect a container from a network using the `docker network 368 disconnect` command. 369 370 ### Mount volumes from container (--volumes-from) 371 372 $ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd 373 374 The `--volumes-from` flag mounts all the defined volumes from the referenced 375 containers. Containers can be specified by repetitions of the `--volumes-from` 376 argument. The container ID may be optionally suffixed with `:ro` or `:rw` to 377 mount the volumes in read-only or read-write mode, respectively. By default, 378 the volumes are mounted in the same mode (read write or read only) as 379 the reference container. 380 381 Labeling systems like SELinux require that proper labels are placed on volume 382 content mounted into a container. Without a label, the security system might 383 prevent the processes running inside the container from using the content. By 384 default, Docker does not change the labels set by the OS. 385 386 To change the label in the container context, you can add either of two suffixes 387 `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file 388 objects on the shared volumes. The `z` option tells Docker that two containers 389 share the volume content. As a result, Docker labels the content with a shared 390 content label. Shared volume labels allow all containers to read/write content. 391 The `Z` option tells Docker to label the content with a private unshared label. 392 Only the current container can use a private volume. 393 394 ### Attach to STDIN/STDOUT/STDERR (-a) 395 396 The `-a` flag tells `docker run` to bind to the container's `STDIN`, `STDOUT` 397 or `STDERR`. This makes it possible to manipulate the output and input as 398 needed. 399 400 $ echo "test" | docker run -i -a stdin ubuntu cat - 401 402 This pipes data into a container and prints the container's ID by attaching 403 only to the container's `STDIN`. 404 405 $ docker run -a stderr ubuntu echo test 406 407 This isn't going to print anything unless there's an error because we've 408 only attached to the `STDERR` of the container. The container's logs 409 still store what's been written to `STDERR` and `STDOUT`. 410 411 $ cat somefile | docker run -i -a stdin mybuilder dobuild 412 413 This is how piping a file into a container could be done for a build. 414 The container's ID will be printed after the build is done and the build 415 logs could be retrieved using `docker logs`. This is 416 useful if you need to pipe a file or something else into a container and 417 retrieve the container's ID once the container has finished running. 418 419 ### Add host device to container (--device) 420 421 $ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo} 422 brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc 423 brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd 424 crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo 425 426 It is often necessary to directly expose devices to a container. The `--device` 427 option enables that. For example, a specific block storage device or loop 428 device or audio device can be added to an otherwise unprivileged container 429 (without the `--privileged` flag) and have the application directly access it. 430 431 By default, the container will be able to `read`, `write` and `mknod` these devices. 432 This can be overridden using a third `:rwm` set of options to each `--device` 433 flag: 434 435 436 $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc 437 438 Command (m for help): q 439 $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc 440 You will not be able to write the partition table. 441 442 Command (m for help): q 443 444 $ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdc 445 446 Command (m for help): q 447 448 $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc 449 fdisk: unable to open /dev/xvdc: Operation not permitted 450 451 > **Note:** 452 > `--device` cannot be safely used with ephemeral devices. Block devices 453 > that may be removed should not be added to untrusted containers with 454 > `--device`. 455 456 ### Restart policies (--restart) 457 458 Use Docker's `--restart` to specify a container's *restart policy*. A restart 459 policy controls whether the Docker daemon restarts a container after exit. 460 Docker supports the following restart policies: 461 462 <table> 463 <thead> 464 <tr> 465 <th>Policy</th> 466 <th>Result</th> 467 </tr> 468 </thead> 469 <tbody> 470 <tr> 471 <td><strong>no</strong></td> 472 <td> 473 Do not automatically restart the container when it exits. This is the 474 default. 475 </td> 476 </tr> 477 <tr> 478 <td> 479 <span style="white-space: nowrap"> 480 <strong>on-failure</strong>[:max-retries] 481 </span> 482 </td> 483 <td> 484 Restart only if the container exits with a non-zero exit status. 485 Optionally, limit the number of restart retries the Docker 486 daemon attempts. 487 </td> 488 </tr> 489 <tr> 490 <td><strong>always</strong></td> 491 <td> 492 Always restart the container regardless of the exit status. 493 When you specify always, the Docker daemon will try to restart 494 the container indefinitely. The container will also always start 495 on daemon startup, regardless of the current state of the container. 496 </td> 497 </tr> 498 <tr> 499 <td><strong>unless-stopped</strong></td> 500 <td> 501 Always restart the container regardless of the exit status, but 502 do not start it on daemon startup if the container has been put 503 to a stopped state before. 504 </td> 505 </tr> 506 </tbody> 507 </table> 508 509 $ docker run --restart=always redis 510 511 This will run the `redis` container with a restart policy of **always** 512 so that if the container exits, Docker will restart it. 513 514 More detailed information on restart policies can be found in the 515 [Restart Policies (--restart)](../run.md#restart-policies-restart) 516 section of the Docker run reference page. 517 518 ### Add entries to container hosts file (--add-host) 519 520 You can add other hosts into a container's `/etc/hosts` file by using one or 521 more `--add-host` flags. This example adds a static address for a host named 522 `docker`: 523 524 $ docker run --add-host=docker:10.180.0.1 --rm -it debian 525 $$ ping docker 526 PING docker (10.180.0.1): 48 data bytes 527 56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms 528 56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms 529 ^C--- docker ping statistics --- 530 2 packets transmitted, 2 packets received, 0% packet loss 531 round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms 532 533 Sometimes you need to connect to the Docker host from within your 534 container. To enable this, pass the Docker host's IP address to 535 the container using the `--add-host` flag. To find the host's address, 536 use the `ip addr show` command. 537 538 The flags you pass to `ip addr show` depend on whether you are 539 using IPv4 or IPv6 networking in your containers. Use the following 540 flags for IPv4 address retrieval for a network device named `eth0`: 541 542 $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` 543 $ docker run --add-host=docker:${HOSTIP} --rm -it debian 544 545 For IPv6 use the `-6` flag instead of the `-4` flag. For other network 546 devices, replace `eth0` with the correct device name (for example `docker0` 547 for the bridge device). 548 549 ### Set ulimits in container (--ulimit) 550 551 Since setting `ulimit` settings in a container requires extra privileges not 552 available in the default container, you can set these using the `--ulimit` flag. 553 `--ulimit` is specified with a soft and hard limit as such: 554 `<type>=<soft limit>[:<hard limit>]`, for example: 555 556 $ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n" 557 1024 558 559 > **Note:** 560 > If you do not provide a `hard limit`, the `soft limit` will be used 561 > for both values. If no `ulimits` are set, they will be inherited from 562 > the default `ulimits` set on the daemon. `as` option is disabled now. 563 > In other words, the following script is not supported: 564 > `$ docker run -it --ulimit as=1024 fedora /bin/bash` 565 566 The values are sent to the appropriate `syscall` as they are set. 567 Docker doesn't perform any byte conversion. Take this into account when setting the values. 568 569 #### For `nproc` usage 570 571 Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to set the 572 maximum number of processes available to a user, not to a container. For example, start four 573 containers with `daemon` user: 574 575 docker run -d -u daemon --ulimit nproc=3 busybox top 576 docker run -d -u daemon --ulimit nproc=3 busybox top 577 docker run -d -u daemon --ulimit nproc=3 busybox top 578 docker run -d -u daemon --ulimit nproc=3 busybox top 579 580 The 4th container fails and reports "[8] System error: resource temporarily unavailable" error. 581 This fails because the caller set `nproc=3` resulting in the first three containers using up 582 the three processes quota set for the `daemon` user. 583 584 ### Stop container with signal (--stop-signal) 585 586 The `--stop-signal` flag sets the system call signal that will be sent to the container to exit. 587 This signal can be a valid unsigned number that matches a position in the kernel's syscall table, for instance 9, 588 or a signal name in the format SIGNAME, for instance SIGKILL. 589 590 ### Specify isolation technology for container (--isolation) 591 592 This option is useful in situations where you are running Docker containers on 593 Microsoft Windows. The `--isolation <value>` option sets a container's isolation 594 technology. On Linux, the only supported is the `default` option which uses 595 Linux namespaces. These two commands are equivalent on Linux: 596 597 ``` 598 $ docker run -d busybox top 599 $ docker run -d --isolation default busybox top 600 ``` 601 602 On Microsoft Windows, can take any of these values: 603 604 605 | Value | Description | 606 |-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| 607 | `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. | 608 | `process` | Namespace isolation only. | 609 | `hyperv` | Hyper-V hypervisor partition-based isolation. | 610 611 In practice, when running on Microsoft Windows without a `daemon` option set, these two commands are equivalent: 612 613 ``` 614 $ docker run -d --isolation default busybox top 615 $ docker run -d --isolation process busybox top 616 ``` 617 618 If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, any of these commands also result in `hyperv` isolation: 619 620 ``` 621 $ docker run -d --isolation default busybox top 622 $ docker run -d --isolation hyperv busybox top 623 ``` 624 625 ### Configure namespaced kernel parameters (sysctls) at runtime 626 627 The `--sysctl` sets namespaced kernel parameters (sysctls) in the 628 container. For example, to turn on IP forwarding in the containers 629 network namespace, run this command: 630 631 $ docker run --sysctl net.ipv4.ip_forward=1 someimage 632 633 634 > **Note**: Not all sysctls are namespaced. docker does not support changing sysctls 635 > inside of a container that also modify the host system. As the kernel 636 > evolves we expect to see more sysctls become namespaced. 637 638 #### Currently supported sysctls 639 640 `IPC Namespace`: 641 642 kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced 643 Sysctls beginning with fs.mqueue.* 644 645 If you use the `--ipc=host` option these sysctls will not be allowed. 646 647 `Network Namespace`: 648 Sysctls beginning with net.* 649 650 If you use the `--net=host` option using these sysctls will not be allowed.