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