github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/man/docker-run.1.md (about) 1 % "DOCKER" "1" "JUNE 2014" "Docker Community" "Docker User Manuals" 2 3 # NAME 4 docker-run - Run a command in a new container 5 6 # SYNOPSIS 7 **docker run** 8 [**-a**|**--attach**[=*[]*]] 9 [**--add-host**[=*[]*]] 10 [**--blkio-weight**[=*[BLKIO-WEIGHT]*]] 11 [**--blkio-weight-device**[=*[]*]] 12 [**--cpu-shares**[=*0*]] 13 [**--cap-add**[=*[]*]] 14 [**--cap-drop**[=*[]*]] 15 [**--cgroupns**[=*[]*]] 16 [**--cgroup-parent**[=*CGROUP-PATH*]] 17 [**--cidfile**[=*CIDFILE*]] 18 [**--cpu-count**[=*0*]] 19 [**--cpu-percent**[=*0*]] 20 [**--cpu-period**[=*0*]] 21 [**--cpu-quota**[=*0*]] 22 [**--cpu-rt-period**[=*0*]] 23 [**--cpu-rt-runtime**[=*0*]] 24 [**--cpus**[=*0.0*]] 25 [**--cpuset-cpus**[=*CPUSET-CPUS*]] 26 [**--cpuset-mems**[=*CPUSET-MEMS*]] 27 [**-d**|**--detach**] 28 [**--detach-keys**[=*[]*]] 29 [**--device**[=*[]*]] 30 [**--device-cgroup-rule**[=*[]*]] 31 [**--device-read-bps**[=*[]*]] 32 [**--device-read-iops**[=*[]*]] 33 [**--device-write-bps**[=*[]*]] 34 [**--device-write-iops**[=*[]*]] 35 [**--dns**[=*[]*]] 36 [**--dns-option**[=*[]*]] 37 [**--dns-search**[=*[]*]] 38 [**--domainname**[=*DOMAINNAME*]] 39 [**-e**|**--env**[=*[]*]] 40 [**--entrypoint**[=*ENTRYPOINT*]] 41 [**--env-file**[=*[]*]] 42 [**--expose**[=*[]*]] 43 [**--group-add**[=*[]*]] 44 [**-h**|**--hostname**[=*HOSTNAME*]] 45 [**--help**] 46 [**--init**] 47 [**-i**|**--interactive**] 48 [**--ip**[=*IPv4-ADDRESS*]] 49 [**--ip6**[=*IPv6-ADDRESS*]] 50 [**--ipc**[=*IPC*]] 51 [**--isolation**[=*default*]] 52 [**--kernel-memory**[=*KERNEL-MEMORY*]] 53 [**-l**|**--label**[=*[]*]] 54 [**--label-file**[=*[]*]] 55 [**--link**[=*[]*]] 56 [**--link-local-ip**[=*[]*]] 57 [**--log-driver**[=*[]*]] 58 [**--log-opt**[=*[]*]] 59 [**-m**|**--memory**[=*MEMORY*]] 60 [**--mac-address**[=*MAC-ADDRESS*]] 61 [**--memory-reservation**[=*MEMORY-RESERVATION*]] 62 [**--memory-swap**[=*LIMIT*]] 63 [**--memory-swappiness**[=*MEMORY-SWAPPINESS*]] 64 [**--mount**[=*[MOUNT]*]] 65 [**--name**[=*NAME*]] 66 [**--network-alias**[=*[]*]] 67 [**--network**[=*"bridge"*]] 68 [**--oom-kill-disable**] 69 [**--oom-score-adj**[=*0*]] 70 [**-P**|**--publish-all**] 71 [**-p**|**--publish**[=*[]*]] 72 [**--pid**[=*[PID]*]] 73 [**--userns**[=*[]*]] 74 [**--pids-limit**[=*PIDS_LIMIT*]] 75 [**--privileged**] 76 [**--read-only**] 77 [**--restart**[=*RESTART*]] 78 [**--rm**] 79 [**--security-opt**[=*[]*]] 80 [**--storage-opt**[=*[]*]] 81 [**--stop-signal**[=*SIGNAL*]] 82 [**--stop-timeout**[=*TIMEOUT*]] 83 [**--shm-size**[=*[]*]] 84 [**--sig-proxy**[=*true*]] 85 [**--sysctl**[=*[]*]] 86 [**-t**|**--tty**] 87 [**--tmpfs**[=*[CONTAINER-DIR[:OPTIONS]*]] 88 [**-u**|**--user**[=*USER*]] 89 [**--ulimit**[=*[]*]] 90 [**--uts**[=*[]*]] 91 [**-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*]] 92 [**--volume-driver**[=*DRIVER*]] 93 [**--volumes-from**[=*[]*]] 94 [**-w**|**--workdir**[=*WORKDIR*]] 95 IMAGE [COMMAND] [ARG...] 96 97 # DESCRIPTION 98 99 Run a process in a new container. **docker run** starts a process with its own 100 file system, its own networking, and its own isolated process tree. The IMAGE 101 which starts the process may define defaults related to the process that will be 102 run in the container, the networking to expose, and more, but **docker run** 103 gives final control to the operator or administrator who starts the container 104 from the image. For that reason **docker run** has more options than any other 105 Docker command. 106 107 If the IMAGE is not already loaded then **docker run** will pull the IMAGE, and 108 all image dependencies, from the repository in the same way running **docker 109 pull** IMAGE, before it starts the container from that image. 110 111 # OPTIONS 112 **-a**, **--attach**=[] 113 Attach to STDIN, STDOUT or STDERR. 114 115 In foreground mode (the default when **-d** 116 is not specified), **docker run** can start the process in the container 117 and attach the console to the process's standard input, output, and standard 118 error. It can even pretend to be a TTY (this is what most commandline 119 executables expect) and pass along signals. The **-a** option can be set for 120 each of stdin, stdout, and stderr. 121 122 **--add-host**=[] 123 Add a custom host-to-IP mapping (host:ip) 124 125 Add a line to /etc/hosts. The format is hostname:ip. The **--add-host** 126 option can be set multiple times. 127 128 **--blkio-weight**=*0* 129 Block IO weight (relative weight) accepts a weight value between 10 and 1000. 130 131 **--blkio-weight-device**=[] 132 Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`). 133 134 **--cpu-shares**=*0* 135 CPU shares (relative weight) 136 137 By default, all containers get the same proportion of CPU cycles. This proportion 138 can be modified by changing the container's CPU share weighting relative 139 to the weighting of all other running containers. 140 141 To modify the proportion from the default of 1024, use the **--cpu-shares** 142 flag to set the weighting to 2 or higher. 143 144 The proportion will only apply when CPU-intensive processes are running. 145 When tasks in one container are idle, other containers can use the 146 left-over CPU time. The actual amount of CPU time will vary depending on 147 the number of containers running on the system. 148 149 For example, consider three containers, one has a cpu-share of 1024 and 150 two others have a cpu-share setting of 512. When processes in all three 151 containers attempt to use 100% of CPU, the first container would receive 152 50% of the total CPU time. If you add a fourth container with a cpu-share 153 of 1024, the first container only gets 33% of the CPU. The remaining containers 154 receive 16.5%, 16.5% and 33% of the CPU. 155 156 On a multi-core system, the shares of CPU time are distributed over all CPU 157 cores. Even if a container is limited to less than 100% of CPU time, it can 158 use 100% of each individual CPU core. 159 160 For example, consider a system with more than three cores. If you start one 161 container **{C0}** with **-c=512** running one process, and another container 162 **{C1}** with **-c=1024** running two processes, this can result in the following 163 division of CPU shares: 164 165 PID container CPU CPU share 166 100 {C0} 0 100% of CPU0 167 101 {C1} 1 100% of CPU1 168 102 {C1} 2 100% of CPU2 169 170 **--cap-add**=[] 171 Add Linux capabilities 172 173 **--cap-drop**=[] 174 Drop Linux capabilities 175 176 **--cgroupns**="" 177 Set the cgroup namespace mode for the container. 178 **host**: run the container in the host's cgroup namespace 179 **private**: run the container in its own private cgroup namespace 180 **""**: (unset) use the daemon's default configuration (**host** on cgroup v1, **private** on cgroup v2) 181 182 **--cgroup-parent**="" 183 Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. 184 185 **--cidfile**="" 186 Write the container ID to the file 187 188 **--cpu-count**=*0* 189 Limit the number of CPUs available for execution by the container. 190 191 On Windows Server containers, this is approximated as a percentage of total CPU usage. 192 193 On Windows Server containers, the processor resource controls are mutually exclusive, the order of precedence is CPUCount first, then CPUShares, and CPUPercent last. 194 195 **--cpu-percent**=*0* 196 Limit the percentage of CPU available for execution by a container running on a Windows daemon. 197 198 On Windows Server containers, the processor resource controls are mutually exclusive, the order of precedence is CPUCount first, then CPUShares, and CPUPercent last. 199 200 **--cpu-period**=*0* 201 Limit the CPU CFS (Completely Fair Scheduler) period 202 203 Limit the container's CPU usage. This flag tell the kernel to restrict the container's CPU usage to the period you specify. 204 205 **--cpuset-cpus**="" 206 CPUs in which to allow execution (0-3, 0,1) 207 208 **--cpuset-mems**="" 209 Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. 210 211 If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1` 212 then processes in your Docker container will only use memory from the first 213 two memory nodes. 214 215 **--cpu-quota**=*0* 216 Limit the CPU CFS (Completely Fair Scheduler) quota 217 218 Limit the container's CPU usage. By default, containers run with the full 219 CPU resource. This flag tell the kernel to restrict the container's CPU usage 220 to the quota you specify. 221 222 **--cpu-rt-period**=0 223 Limit the CPU real-time period in microseconds 224 225 Limit the container's Real Time CPU usage. This flag tell the kernel to restrict the container's Real Time CPU usage to the period you specify. 226 227 **--cpu-rt-runtime**=0 228 Limit the CPU real-time runtime in microseconds 229 230 Limit the containers Real Time CPU usage. This flag tells the kernel to limit the amount of time in a given CPU period Real Time tasks may consume. Ex: 231 Period of 1,000,000us and Runtime of 950,000us means that this container could consume 95% of available CPU and leave the remaining 5% to normal priority tasks. 232 233 The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup. 234 235 **--cpus**=0.0 236 Number of CPUs. The default is *0.0* which means no limit. 237 238 **-d**, **--detach**=*true*|*false* 239 Detached mode: run the container in the background and print the new container ID. The default is *false*. 240 241 At any time you can run **docker ps** in 242 the other shell to view a list of the running containers. You can reattach to a 243 detached container with **docker attach**. 244 245 When attached in the tty mode, you can detach from the container (and leave it 246 running) using a configurable key sequence. The default sequence is `CTRL-p CTRL-q`. 247 You configure the key sequence using the **--detach-keys** option or a configuration file. 248 See **config-json(5)** for documentation on using a configuration file. 249 250 **--detach-keys**=*key* 251 Override the key sequence for detaching a container; *key* is a single character from the [a-Z] range, or **ctrl**-*value*, where *value* is one of: **a-z**, **@**, **^**, **[**, **,**, or **_**. 252 253 **--device**=*onhost*:*incontainer*[:*mode*] 254 Add a host device *onhost* to the container under the *incontainer* name. 255 Optional *mode* parameter can be used to specify device permissions, it is 256 a combination of **r** (for read), **w** (for write), and **m** (for **mknod**(2)). 257 258 For example, **--device=/dev/sdc:/dev/xvdc:rwm** will give a container all 259 permissions for the host device **/dev/sdc**, seen as **/dev/xvdc** inside the container. 260 261 **--device-cgroup-rule**="*type* *major*:*minor* *mode*" 262 Add a rule to the cgroup allowed devices list. The rule is expected to be in the format specified in the Linux kernel documentation (Documentation/cgroup-v1/devices.txt): 263 - *type*: **a** (all), **c** (char), or **b** (block); 264 - *major* and *minor*: either a number, or __*__ for all; 265 - *mode*: a composition of **r** (read), **w** (write), and **m** (**mknod**(2)). 266 267 Example: **--device-cgroup-rule "c 1:3 mr"**: allow for a character device idendified by **1:3** to be created and read. 268 269 **--device-read-bps**=[] 270 Limit read rate from a device (e.g. --device-read-bps=/dev/sda:1mb) 271 272 **--device-read-iops**=[] 273 Limit read rate from a device (e.g. --device-read-iops=/dev/sda:1000) 274 275 **--device-write-bps**=[] 276 Limit write rate to a device (e.g. --device-write-bps=/dev/sda:1mb) 277 278 **--device-write-iops**=[] 279 Limit write rate to a device (e.g. --device-write-iops=/dev/sda:1000) 280 281 **--dns-search**=[] 282 Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) 283 284 **--dns-option**=[] 285 Set custom DNS options 286 287 **--dns**=[] 288 Set custom DNS servers 289 290 This option can be used to override the DNS 291 configuration passed to the container. Typically this is necessary when the 292 host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this 293 is the case the **--dns** flags is necessary for every run. 294 295 **--domainname**="" 296 Container NIS domain name 297 298 Sets the container's NIS domain name (see also **setdomainname(2)**) that is 299 available inside the container. 300 301 **-e**, **--env**=[] 302 Set environment variables 303 304 This option allows you to specify arbitrary 305 environment variables that are available for the process that will be launched 306 inside of the container. 307 308 **--entrypoint**="" 309 Overwrite the default ENTRYPOINT of the image 310 311 This option allows you to overwrite the default entrypoint of the image that 312 is set in the Dockerfile. The ENTRYPOINT of an image is similar to a COMMAND 313 because it specifies what executable to run when the container starts, but it is 314 (purposely) more difficult to override. The ENTRYPOINT gives a container its 315 default nature or behavior, so that when you set an ENTRYPOINT you can run the 316 container as if it were that binary, complete with default options, and you can 317 pass in more options via the COMMAND. But, sometimes an operator may want to run 318 something else inside the container, so you can override the default ENTRYPOINT 319 at runtime by using a **--entrypoint** and a string to specify the new 320 ENTRYPOINT. 321 322 **--env-file**=[] 323 Read in a line delimited file of environment variables 324 325 **--expose**=[] 326 Expose a port, or a range of ports (e.g. --expose=3300-3310) informs Docker 327 that the container listens on the specified network ports at runtime. Docker 328 uses this information to interconnect containers using links and to set up port 329 redirection on the host system. 330 331 **--group-add**=[] 332 Add additional groups to run as 333 334 **-h**, **--hostname**="" 335 Container host name 336 337 Sets the container host name that is available inside the container. 338 339 **--help** 340 Print usage statement 341 342 **--init** 343 Run an init inside the container that forwards signals and reaps processes 344 345 **-i**, **--interactive**=*true*|*false* 346 Keep STDIN open even if not attached. The default is *false*. 347 348 When set to true, keep stdin open even if not attached. 349 350 **--ip**="" 351 Sets the container's interface IPv4 address (e.g., 172.23.0.9) 352 353 It can only be used in conjunction with **--network** for user-defined networks 354 355 **--ip6**="" 356 Sets the container's interface IPv6 address (e.g., 2001:db8::1b99) 357 358 It can only be used in conjunction with **--network** for user-defined networks 359 360 **--ipc**="" 361 Sets the IPC mode for the container. The following values are accepted: 362 363 | Value | Description | 364 |:---------------------------|:----------------------------------------------------------------------------------| 365 | (empty) | Use daemon's default. | 366 | **none** | Own private IPC namespace, with /dev/shm not mounted. | 367 | **private** | Own private IPC namespace. | 368 | **shareable** | Own private IPC namespace, with a possibility to share it with other containers. | 369 | **container:**_name-or-ID_ | Join another ("shareable") container's IPC namespace. | 370 | **host** | Use the host system's IPC namespace. | 371 372 If not specified, daemon default is used, which can either be **private** 373 or **shareable**, depending on the daemon version and configuration. 374 375 **--isolation**="*default*" 376 Isolation specifies the type of isolation technology used by containers. Note 377 that the default on Windows server is `process`, and the default on Windows client 378 is `hyperv`. Linux only supports `default`. 379 380 **-l**, **--label** *key*=*value* 381 Set metadata on the container (for example, **--label com.example.key=value**). 382 383 **--kernel-memory**=*number*[*S*] 384 Kernel memory limit; *S* is an optional suffix which can be one of **b**, **k**, **m**, or **g**. 385 386 Constrains the kernel memory available to a container. If a limit of 0 387 is specified (not using **--kernel-memory**), the container's kernel memory 388 is not limited. If you specify a limit, it may be rounded up to a multiple 389 of the operating system's page size and the value can be very large, 390 millions of trillions. 391 392 **--label-file**=[] 393 Read in a line delimited file of labels 394 395 **--link**=*name-or-id*[:*alias*] 396 Add link to another container. 397 398 If the operator 399 uses **--link** when starting the new client container, then the client 400 container can access the exposed port via a private networking interface. Docker 401 will set some environment variables in the client container to help indicate 402 which interface and port to use. 403 404 **--link-local-ip**=[] 405 Add one or more link-local IPv4/IPv6 addresses to the container's interface 406 407 **--log-driver**="*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*splunk*|*etwlogs*|*gcplogs*|*none*" 408 Logging driver for the container. Default is defined by daemon **--log-driver** flag. 409 **Warning**: the `docker logs` command works only for the `json-file` and 410 `journald` logging drivers. 411 412 **--log-opt**=[] 413 Logging driver specific options. 414 415 **-m**, **--memory**=*number*[*S] 416 Memory limit; *S* is an optional suffix which can be one of **b**, **k**, **m**, or **g**. 417 418 Allows you to constrain the memory available to a container. If the host 419 supports swap memory, then the **-m** memory setting can be larger than physical 420 RAM. If a limit of 0 is specified (not using **-m**), the container's memory is 421 not limited. The actual limit may be rounded up to a multiple of the operating 422 system's page size (the value would be very large, that's millions of trillions). 423 424 **--memory-reservation**=*number*[*S] 425 Memory soft limit; *S* is an optional suffix which can be one of **b**, **k**, **m**, or **g**. 426 427 After setting memory reservation, when the system detects memory contention 428 or low memory, containers are forced to restrict their consumption to their 429 reservation. So you should always set the value below **--memory**, otherwise the 430 hard limit will take precedence. By default, memory reservation will be the same 431 as memory limit. 432 433 **--memory-swap**=*number*[*S*] 434 Combined memory plus swap limit; *S* is an optional suffix which can be one of **b**, **k**, **m**, or **g**. 435 436 This option can only be used together with **--memory**. The argument should always be larger than that of **--memory**. Default is double the value of **--memory**. Set to **-1** to enable unlimited swap. 437 438 **--mac-address**="" 439 Container MAC address (e.g., **92:d0:c6:0a:29:33**) 440 441 Remember that the MAC address in an Ethernet network must be unique. 442 The IPv6 link-local address will be based on the device's MAC address 443 according to RFC4862. 444 445 **--mount** **type=**_TYPE_,*TYPE-SPECIFIC-OPTION*[,...] 446 Attach a filesystem mount to the container 447 448 Current supported mount `TYPES` are `bind`, `volume`, and `tmpfs`. 449 450 e.g. 451 452 `type=bind,source=/path/on/host,destination=/path/in/container` 453 454 `type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round"` 455 456 `type=tmpfs,tmpfs-size=512M,destination=/path/in/container` 457 458 Common Options: 459 460 * `src`, `source`: mount source spec for `bind` and `volume`. Mandatory for `bind`. 461 * `dst`, `destination`, `target`: mount destination spec. 462 * `ro`, `readonly`: `true` or `false` (default). 463 464 **Note**: setting `readonly` for a bind mount does not make its submounts 465 read-only on the current Linux implementation. See also `bind-nonrecursive`. 466 467 Options specific to `bind`: 468 469 * `bind-propagation`: `shared`, `slave`, `private`, `rshared`, `rslave`, or `rprivate`(default). See also `mount(2)`. 470 * `consistency`: `consistent`(default), `cached`, or `delegated`. Currently, only effective for Docker for Mac. 471 * `bind-nonrecursive`: `true` or `false` (default). If set to `true`, 472 submounts are not recursively bind-mounted. This option is useful for 473 `readonly` bind mount. 474 475 Options specific to `volume`: 476 477 * `volume-driver`: Name of the volume-driver plugin. 478 * `volume-label`: Custom metadata. 479 * `volume-nocopy`: `true`(default) or `false`. If set to `false`, the Engine copies existing files and directories under the mount-path into the volume, allowing the host to access them. 480 * `volume-opt`: specific to a given volume driver. 481 482 Options specific to `tmpfs`: 483 484 * `tmpfs-size`: Size of the tmpfs mount in bytes. Unlimited by default in Linux. 485 * `tmpfs-mode`: File mode of the tmpfs in octal. (e.g. `700` or `0700`.) Defaults to `1777` in Linux. 486 487 **--name**="" 488 Assign a name to the container 489 490 The operator can identify a container in three ways: 491 492 | Identifier type | Example value | 493 |:----------------------|:-------------------------------------------------------------------| 494 | UUID long identifier | "f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778" | 495 | UUID short identifier | "f78375b1c487" | 496 | Name | "evil_ptolemy" | 497 498 The UUID identifiers come from the Docker daemon, and if a name is not assigned 499 to the container with **--name** then the daemon will also generate a random 500 string name. The name is useful when defining links (see **--link**) (or any 501 other place you need to identify a container). This works for both background 502 and foreground Docker containers. 503 504 **--network**=*type* 505 Set the Network mode for the container. Supported values are: 506 507 | Value | Description | 508 |:----------------------------|:-----------------------------------------------------------------------------------------| 509 | **none** | No networking in the container. | 510 | **bridge** | Connect the container to the default Docker bridge via veth interfaces. | 511 | **host** | Use the host's network stack inside the container. | 512 | **container:**_name_|_id_ | Use the network stack of another container, specified via its _name_ or _id_. | 513 | _network-name_|_network-id_ | Connects the container to a user created network (using `docker network create` command) | 514 515 Default is **bridge**. 516 517 **--network-alias**=[] 518 Add network-scoped alias for the container 519 520 **--oom-kill-disable**=*true*|*false* 521 Whether to disable OOM Killer for the container or not. 522 523 **--oom-score-adj**="" 524 Tune the host's OOM preferences for containers (accepts -1000 to 1000) 525 526 **-P**, **--publish-all**=*true*|*false* 527 Publish all exposed ports to random ports on the host interfaces. The default is *false*. 528 529 When set to true publish all exposed ports to the host interfaces. The 530 default is false. If the operator uses -P (or -p) then Docker will make the 531 exposed port accessible on the host and the ports will be available to any 532 client that can reach the host. When using -P, Docker will bind any exposed 533 port to a random port on the host within an *ephemeral port range* defined by 534 `/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host 535 ports and the exposed ports, use `docker port`(1). 536 537 **-p**, **--publish** *ip*:[*hostPort*]:*containerPort* | [*hostPort*:]*containerPort* 538 Publish a container's port, or range of ports, to the host. 539 540 Both *hostPort* and *containerPort* can be specified as a range. 541 When specifying ranges for both, the number of ports in ranges should be equal. 542 543 Examples: **-p 1234-1236:1222-1224**, **-p 127.0.0.1:$HOSTPORT:$CONTAINERPORT**. 544 545 Use `docker port`(1) to see the actual mapping, e.g. `docker port CONTAINER $CONTAINERPORT`. 546 547 **--pid**="" 548 Set the PID mode for the container 549 Default is to create a private PID namespace for the container 550 'container:<name|id>': join another container's PID namespace 551 'host': use the host's PID namespace for the container. Note: the host mode gives the container full access to local PID and is therefore considered insecure. 552 553 **--userns**="" 554 Set the usernamespace mode for the container when `userns-remap` option is enabled. 555 **host**: use the host usernamespace and enable all privileged options (e.g., `pid=host` or `--privileged`). 556 557 **--pids-limit**="" 558 Tune the container's pids (process IDs) limit. Set to `-1` to have unlimited pids for the container. 559 560 **--uts**=*type* 561 Set the UTS mode for the container. The only possible *type* is **host**, meaning to 562 use the host's UTS namespace inside the container. 563 Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure. 564 565 **--privileged** [**true**|**false**] 566 Give extended privileges to this container. A "privileged" container is given access to all devices. 567 568 When the operator executes **docker run --privileged**, Docker will enable access 569 to all devices on the host as well as set some configuration in AppArmor to 570 allow the container nearly all the same access to the host as processes running 571 outside of a container on the host. 572 573 **--read-only**=**true**|**false** 574 Mount the container's root filesystem as read only. 575 576 By default a container will have its root filesystem writable allowing processes 577 to write files anywhere. By specifying the `--read-only` flag the container will have 578 its root filesystem mounted as read only prohibiting any writes. 579 580 **--restart** *policy* 581 Restart policy to apply when a container exits. Supported values are: 582 583 | Policy | Result | 584 |:-------------------------------|:----------------------| 585 | **no** | Do not automatically restart the container when it exits. | 586 | **on-failure**[:_max-retries_] | Restart only if the container exits with a non-zero exit status. Optionally, limit the number of restart retries the Docker daemon attempts. | 587 | **always** | Always restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container. | 588 | **unless-stopped** | Always restart the container regardless of the exit status, but do not start it on daemon startup if the container has been put to a stopped state before. | 589 590 Default is **no**. 591 592 **--rm** **true**|**false** 593 Automatically remove the container when it exits. The default is **false**. 594 `--rm` flag can work together with `-d`, and auto-removal will be done on daemon side. Note that it's 595 incompatible with any restart policy other than `none`. 596 597 **--security-opt** *value*[,...] 598 Security Options for the container. The following options can be given: 599 600 "label=user:USER" : Set the label user for the container 601 "label=role:ROLE" : Set the label role for the container 602 "label=type:TYPE" : Set the label type for the container 603 "label=level:LEVEL" : Set the label level for the container 604 "label=disable" : Turn off label confinement for the container 605 "no-new-privileges" : Disable container processes from gaining additional privileges 606 607 "seccomp=unconfined" : Turn off seccomp confinement for the container 608 "seccomp=profile.json : White listed syscalls seccomp Json file to be used as a seccomp filter 609 610 "apparmor=unconfined" : Turn off apparmor confinement for the container 611 "apparmor=your-profile" : Set the apparmor confinement profile for the container 612 613 **--storage-opt** 614 Storage driver options per container 615 616 $ docker run -it --storage-opt size=120G fedora /bin/bash 617 618 This (size) will allow to set the container rootfs size to 120G at creation time. 619 This option is only available for the `devicemapper`, `btrfs`, `overlay2` and `zfs` graph drivers. 620 For the `devicemapper`, `btrfs` and `zfs` storage drivers, user cannot pass a size less than the Default BaseFS Size. 621 For the `overlay2` storage driver, the size option is only available if the backing fs is `xfs` and mounted with the `pquota` mount option. 622 Under these conditions, user can pass any size less than the backing fs size. 623 624 **--stop-signal**=*SIGTERM* 625 Signal to stop a container. Default is SIGTERM. 626 627 **--stop-timeout**=*10* 628 Timeout (in seconds) to stop a container. Default is 10. 629 630 **--shm-size**="" 631 Size of `/dev/shm`. The format is `<number><unit>`. 632 `number` must be greater than `0`. Unit is optional and can be `b` (bytes), `k` (kilobytes), `m`(megabytes), or `g` (gigabytes). 633 If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. 634 635 **--sysctl**=SYSCTL 636 Configure namespaced kernel parameters at runtime 637 638 IPC Namespace - current sysctls allowed: 639 640 kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced 641 Sysctls beginning with fs.mqueue.* 642 643 If you use the `--ipc=host` option these sysctls will not be allowed. 644 645 Network Namespace - current sysctls allowed: 646 Sysctls beginning with net.* 647 648 If you use the `--network=host` option these sysctls will not be allowed. 649 650 **--sig-proxy**=*true*|*false* 651 Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true*. 652 653 **--memory-swappiness**="" 654 Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. 655 656 **-t**, **--tty**=*true*|*false* 657 Allocate a pseudo-TTY. The default is *false*. 658 659 When set to true Docker can allocate a pseudo-tty and attach to the standard 660 input of any container. This can be used, for example, to run a throwaway 661 interactive shell. The default is false. 662 663 The **-t** option is incompatible with a redirection of the docker client 664 standard input. 665 666 **--tmpfs**=[] Create a tmpfs mount 667 668 Mount a temporary filesystem (`tmpfs`) mount into a container, for example: 669 670 $ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image 671 672 This command mounts a `tmpfs` at `/tmp` within the container. The supported mount 673 options are the same as the Linux default `mount` flags. If you do not specify 674 any options, the systems uses the following options: 675 `rw,noexec,nosuid,nodev,size=65536k`. 676 677 See also `--mount`, which is the successor of `--tmpfs` and `--volume`. 678 Even though there is no plan to deprecate `--tmpfs`, usage of `--mount` is recommended. 679 680 **-u**, **--user**="" 681 Sets the username or UID used and optionally the groupname or GID for the specified command. 682 683 The followings examples are all valid: 684 --user [user | user:group | uid | uid:gid | user:gid | uid:group ] 685 686 Without this argument the command will be run as root in the container. 687 688 **--ulimit**=[] 689 Ulimit options 690 691 **-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*] 692 Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, Docker 693 bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the Docker 694 container. If 'HOST-DIR' is omitted, Docker automatically creates the new 695 volume on the host. The `OPTIONS` are a comma delimited list and can be: 696 697 * [rw|ro] 698 * [z|Z] 699 * [`[r]shared`|`[r]slave`|`[r]private`] 700 * [`delegated`|`cached`|`consistent`] 701 * [nocopy] 702 703 The `CONTAINER-DIR` must be an absolute path such as `/src/docs`. The `HOST-DIR` 704 can be an absolute path or a `name` value. A `name` value must start with an 705 alphanumeric character, followed by `a-z0-9`, `_` (underscore), `.` (period) or 706 `-` (hyphen). An absolute path starts with a `/` (forward slash). 707 708 If you supply a `HOST-DIR` that is an absolute path, Docker bind-mounts to the 709 path you specify. If you supply a `name`, Docker creates a named volume by that 710 `name`. For example, you can specify either `/foo` or `foo` for a `HOST-DIR` 711 value. If you supply the `/foo` value, Docker creates a bind mount. If you 712 supply the `foo` specification, Docker creates a named volume. 713 714 You can specify multiple **-v** options to mount one or more mounts to a 715 container. To use these same mounts in other containers, specify the 716 **--volumes-from** option also. 717 718 You can supply additional options for each bind mount following an additional 719 colon. A `:ro` or `:rw` suffix mounts a volume in read-only or read-write 720 mode, respectively. By default, volumes are mounted in read-write mode. 721 You can also specify the consistency requirement for the mount, either 722 `:consistent` (the default), `:cached`, or `:delegated`. Multiple options are 723 separated by commas, e.g. `:ro,cached`. 724 725 Labeling systems like SELinux require that proper labels are placed on volume 726 content mounted into a container. Without a label, the security system might 727 prevent the processes running inside the container from using the content. By 728 default, Docker does not change the labels set by the OS. 729 730 To change a label in the container context, you can add either of two suffixes 731 `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file 732 objects on the shared volumes. The `z` option tells Docker that two containers 733 share the volume content. As a result, Docker labels the content with a shared 734 content label. Shared volume labels allow all containers to read/write content. 735 The `Z` option tells Docker to label the content with a private unshared label. 736 Only the current container can use a private volume. 737 738 By default bind mounted volumes are `private`. That means any mounts done 739 inside container will not be visible on host and vice-a-versa. One can change 740 this behavior by specifying a volume mount propagation property. Making a 741 volume `shared` mounts done under that volume inside container will be 742 visible on host and vice-a-versa. Making a volume `slave` enables only one 743 way mount propagation and that is mounts done on host under that volume 744 will be visible inside container but not the other way around. 745 746 To control mount propagation property of volume one can use `:[r]shared`, 747 `:[r]slave` or `:[r]private` propagation flag. Propagation property can 748 be specified only for bind mounted volumes and not for internal volumes or 749 named volumes. For mount propagation to work source mount point (mount point 750 where source dir is mounted on) has to have right propagation properties. For 751 shared volumes, source mount point has to be shared. And for slave volumes, 752 source mount has to be either shared or slave. 753 754 Use `df <source-dir>` to figure out the source mount and then use 755 `findmnt -o TARGET,PROPAGATION <source-mount-dir>` to figure out propagation 756 properties of source mount. If `findmnt` utility is not available, then one 757 can look at mount entry for source mount point in `/proc/self/mountinfo`. Look 758 at `optional fields` and see if any propagation properties are specified. 759 `shared:X` means mount is `shared`, `master:X` means mount is `slave` and if 760 nothing is there that means mount is `private`. 761 762 To change propagation properties of a mount point use `mount` command. For 763 example, if one wants to bind mount source directory `/foo` one can do 764 `mount --bind /foo /foo` and `mount --make-private --make-shared /foo`. This 765 will convert /foo into a `shared` mount point. Alternatively one can directly 766 change propagation properties of source mount. Say `/` is source mount for 767 `/foo`, then use `mount --make-shared /` to convert `/` into a `shared` mount. 768 769 > **Note**: 770 > When using systemd to manage the Docker daemon's start and stop, in the systemd 771 > unit file there is an option to control mount propagation for the Docker daemon 772 > itself, called `MountFlags`. The value of this setting may cause Docker to not 773 > see mount propagation changes made on the mount point. For example, if this value 774 > is `slave`, you may not be able to use the `shared` or `rshared` propagation on 775 > a volume. 776 777 To disable automatic copying of data from the container path to the volume, use 778 the `nocopy` flag. The `nocopy` flag can be set on bind mounts and named volumes. 779 780 See also `--mount`, which is the successor of `--tmpfs` and `--volume`. 781 Even though there is no plan to deprecate `--volume`, usage of `--mount` is recommended. 782 783 **--volume-driver**="" 784 Container's volume driver. This driver creates volumes specified either from 785 a Dockerfile's `VOLUME` instruction or from the `docker run -v` flag. 786 See **docker-volume-create(1)** for full details. 787 788 **--volumes-from**=[] 789 Mount volumes from the specified container(s) 790 791 Mounts already mounted volumes from a source container onto another 792 container. You must supply the source's container-id. To share 793 a volume, use the **--volumes-from** option when running 794 the target container. You can share volumes even if the source container 795 is not running. 796 797 By default, Docker mounts the volumes in the same mode (read-write or 798 read-only) as it is mounted in the source container. Optionally, you 799 can change this by suffixing the container-id with either the `:ro` or 800 `:rw ` keyword. 801 802 If the location of the volume from the source container overlaps with 803 data residing on a target container, then the volume hides 804 that data on the target. 805 806 **-w**, **--workdir**="" 807 Working directory inside the container 808 809 The default working directory for 810 running binaries within a container is the root directory (/). The developer can 811 set a different default with the Dockerfile WORKDIR instruction. The operator 812 can override the working directory by using the **-w** option. 813 814 # Exit Status 815 816 The exit code from `docker run` gives information about why the container 817 failed to run or why it exited. When `docker run` exits with a non-zero code, 818 the exit codes follow the `chroot` standard, see below: 819 820 **_125_** if the error is with Docker daemon **_itself_** 821 822 $ docker run --foo busybox; echo $? 823 # flag provided but not defined: --foo 824 See 'docker run --help'. 825 125 826 827 **_126_** if the **_contained command_** cannot be invoked 828 829 $ docker run busybox /etc; echo $? 830 # exec: "/etc": permission denied 831 docker: Error response from daemon: Contained command could not be invoked 832 126 833 834 **_127_** if the **_contained command_** cannot be found 835 836 $ docker run busybox foo; echo $? 837 # exec: "foo": executable file not found in $PATH 838 docker: Error response from daemon: Contained command not found or does not exist 839 127 840 841 **_Exit code_** of **_contained command_** otherwise 842 843 $ docker run busybox /bin/sh -c 'exit 3' 844 # 3 845 846 # EXAMPLES 847 848 ## Running container in read-only mode 849 850 During container image development, containers often need to write to the image 851 content. Installing packages into /usr, for example. In production, 852 applications seldom need to write to the image. Container applications write 853 to volumes if they need to write to file systems at all. Applications can be 854 made more secure by running them in read-only mode using the --read-only switch. 855 This protects the containers image from modification. Read only containers may 856 still need to write temporary data. The best way to handle this is to mount 857 tmpfs directories on /run and /tmp. 858 859 # docker run --read-only --tmpfs /run --tmpfs /tmp -i -t fedora /bin/bash 860 861 ## Exposing log messages from the container to the host's log 862 863 If you want messages that are logged in your container to show up in the host's 864 syslog/journal then you should bind mount the /dev/log directory as follows. 865 866 # docker run -v /dev/log:/dev/log -i -t fedora /bin/bash 867 868 From inside the container you can test this by sending a message to the log. 869 870 (bash)# logger "Hello from my container" 871 872 Then exit and check the journal. 873 874 # exit 875 876 # journalctl -b | grep Hello 877 878 This should list the message sent to logger. 879 880 ## Attaching to one or more from STDIN, STDOUT, STDERR 881 882 If you do not specify -a then Docker will attach everything (stdin,stdout,stderr) 883 . You can specify to which of the three standard streams (stdin, stdout, stderr) 884 you'd like to connect instead, as in: 885 886 # docker run -a stdin -a stdout -i -t fedora /bin/bash 887 888 ## Sharing IPC between containers 889 890 Using shm_server.c available here: https://www.cs.cf.ac.uk/Dave/C/node27.html 891 892 Testing `--ipc=host` mode: 893 894 Host shows a shared memory segment with 7 pids attached, happens to be from httpd: 895 896 ``` 897 $ sudo ipcs -m 898 899 ------ Shared Memory Segments -------- 900 key shmid owner perms bytes nattch status 901 0x01128e25 0 root 600 1000 7 902 ``` 903 904 Now run a regular container, and it correctly does NOT see the shared memory segment from the host: 905 906 ``` 907 $ docker run -it shm ipcs -m 908 909 ------ Shared Memory Segments -------- 910 key shmid owner perms bytes nattch status 911 ``` 912 913 Run a container with the new `--ipc=host` option, and it now sees the shared memory segment from the host httpd: 914 915 ``` 916 $ docker run -it --ipc=host shm ipcs -m 917 918 ------ Shared Memory Segments -------- 919 key shmid owner perms bytes nattch status 920 0x01128e25 0 root 600 1000 7 921 ``` 922 Testing `--ipc=container:CONTAINERID` mode: 923 924 Start a container with a program to create a shared memory segment: 925 ``` 926 $ docker run -it shm bash 927 $ sudo shm/shm_server & 928 $ sudo ipcs -m 929 930 ------ Shared Memory Segments -------- 931 key shmid owner perms bytes nattch status 932 0x0000162e 0 root 666 27 1 933 ``` 934 Create a 2nd container correctly shows no shared memory segment from 1st container: 935 ``` 936 $ docker run shm ipcs -m 937 938 ------ Shared Memory Segments -------- 939 key shmid owner perms bytes nattch status 940 ``` 941 942 Create a 3rd container using the new --ipc=container:CONTAINERID option, now it shows the shared memory segment from the first: 943 944 ``` 945 $ docker run -it --ipc=container:ed735b2264ac shm ipcs -m 946 $ sudo ipcs -m 947 948 ------ Shared Memory Segments -------- 949 key shmid owner perms bytes nattch status 950 0x0000162e 0 root 666 27 1 951 ``` 952 953 ## Linking Containers 954 955 > **Note**: This section describes linking between containers on the 956 > default (bridge) network, also known as "legacy links". Using `--link` 957 > on user-defined networks uses the DNS-based discovery, which does not add 958 > entries to `/etc/hosts`, and does not set environment variables for 959 > discovery. 960 961 The link feature allows multiple containers to communicate with each other. For 962 example, a container whose Dockerfile has exposed port 80 can be run and named 963 as follows: 964 965 # docker run --name=link-test -d -i -t fedora/httpd 966 967 A second container, in this case called linker, can communicate with the httpd 968 container, named link-test, by running with the **--link=<name>:<alias>** 969 970 # docker run -t -i --link=link-test:lt --name=linker fedora /bin/bash 971 972 Now the container linker is linked to container link-test with the alias lt. 973 Running the **env** command in the linker container shows environment variables 974 with the LT (alias) context (**LT_**) 975 976 # env 977 HOSTNAME=668231cb0978 978 TERM=xterm 979 LT_PORT_80_TCP=tcp://172.17.0.3:80 980 LT_PORT_80_TCP_PORT=80 981 LT_PORT_80_TCP_PROTO=tcp 982 LT_PORT=tcp://172.17.0.3:80 983 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 984 PWD=/ 985 LT_NAME=/linker/lt 986 SHLVL=1 987 HOME=/ 988 LT_PORT_80_TCP_ADDR=172.17.0.3 989 _=/usr/bin/env 990 991 When linking two containers Docker will use the exposed ports of the container 992 to create a secure tunnel for the parent to access. 993 994 If a container is connected to the default bridge network and `linked` 995 with other containers, then the container's `/etc/hosts` file is updated 996 with the linked container's name. 997 998 > **Note** Since Docker may live update the container's `/etc/hosts` file, there 999 may be situations when processes inside the container can end up reading an 1000 empty or incomplete `/etc/hosts` file. In most cases, retrying the read again 1001 should fix the problem. 1002 1003 1004 ## Mapping Ports for External Usage 1005 1006 The exposed port of an application can be mapped to a host port using the **-p** 1007 flag. For example, an httpd port 80 can be mapped to the host port 8080 using the 1008 following: 1009 1010 # docker run -p 8080:80 -d -i -t fedora/httpd 1011 1012 ## Creating and Mounting a Data Volume Container 1013 1014 Many applications require the sharing of persistent data across several 1015 containers. Docker allows you to create a Data Volume Container that other 1016 containers can mount from. For example, create a named container that contains 1017 directories /var/volume1 and /tmp/volume2. The image will need to contain these 1018 directories so a couple of RUN mkdir instructions might be required for you 1019 fedora-data image: 1020 1021 # docker run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true 1022 # docker run --volumes-from=data --name=fedora-container1 -i -t fedora bash 1023 1024 Multiple --volumes-from parameters will bring together multiple data volumes from 1025 multiple containers. And it's possible to mount the volumes that came from the 1026 DATA container in yet another container via the fedora-container1 intermediary 1027 container, allowing to abstract the actual data source from users of that data: 1028 1029 # docker run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash 1030 1031 ## Mounting External Volumes 1032 1033 To mount a host directory as a container volume, specify the absolute path to 1034 the directory and the absolute path for the container directory separated by a 1035 colon: 1036 1037 # docker run -v /var/db:/data1 -i -t fedora bash 1038 1039 When using SELinux, be aware that the host has no knowledge of container SELinux 1040 policy. Therefore, in the above example, if SELinux policy is enforced, the 1041 `/var/db` directory is not writable to the container. A "Permission Denied" 1042 message will occur and an avc: message in the host's syslog. 1043 1044 1045 To work around this, at time of writing this man page, the following command 1046 needs to be run in order for the proper SELinux policy type label to be attached 1047 to the host directory: 1048 1049 # chcon -Rt svirt_sandbox_file_t /var/db 1050 1051 1052 Now, writing to the /data1 volume in the container will be allowed and the 1053 changes will also be reflected on the host in /var/db. 1054 1055 ## Using alternative security labeling 1056 1057 You can override the default labeling scheme for each container by specifying 1058 the `--security-opt` flag. For example, you can specify the MCS/MLS level, a 1059 requirement for MLS systems. Specifying the level in the following command 1060 allows you to share the same content between containers. 1061 1062 # docker run --security-opt label=level:s0:c100,c200 -i -t fedora bash 1063 1064 An MLS example might be: 1065 1066 # docker run --security-opt label=level:TopSecret -i -t rhel7 bash 1067 1068 To disable the security labeling for this container versus running with the 1069 `--permissive` flag, use the following command: 1070 1071 # docker run --security-opt label=disable -i -t fedora bash 1072 1073 If you want a tighter security policy on the processes within a container, 1074 you can specify an alternate type for the container. You could run a container 1075 that is only allowed to listen on Apache ports by executing the following 1076 command: 1077 1078 # docker run --security-opt label=type:svirt_apache_t -i -t centos bash 1079 1080 Note: 1081 1082 You would have to write policy defining a `svirt_apache_t` type. 1083 1084 ## Setting device weight 1085 1086 If you want to set `/dev/sda` device weight to `200`, you can specify the device 1087 weight by `--blkio-weight-device` flag. Use the following command: 1088 1089 # docker run -it --blkio-weight-device "/dev/sda:200" ubuntu 1090 1091 ## Specify isolation technology for container (--isolation) 1092 1093 This option is useful in situations where you are running Docker containers on 1094 Microsoft Windows. The `--isolation <value>` option sets a container's isolation 1095 technology. On Linux, the only supported is the `default` option which uses 1096 Linux namespaces. These two commands are equivalent on Linux: 1097 1098 ``` 1099 $ docker run -d busybox top 1100 $ docker run -d --isolation default busybox top 1101 ``` 1102 1103 On Microsoft Windows, can take any of these values: 1104 1105 * `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. 1106 * `process`: Namespace isolation only. 1107 * `hyperv`: Hyper-V hypervisor partition-based isolation. 1108 1109 In practice, when running on Microsoft Windows without a `daemon` option set, these two commands are equivalent: 1110 1111 ``` 1112 $ docker run -d --isolation default busybox top 1113 $ docker run -d --isolation process busybox top 1114 ``` 1115 1116 If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, any of these commands also result in `hyperv` isolation: 1117 1118 ``` 1119 $ docker run -d --isolation default busybox top 1120 $ docker run -d --isolation hyperv busybox top 1121 ``` 1122 1123 ## Setting Namespaced Kernel Parameters (Sysctls) 1124 1125 The `--sysctl` sets namespaced kernel parameters (sysctls) in the 1126 container. For example, to turn on IP forwarding in the containers 1127 network namespace, run this command: 1128 1129 $ docker run --sysctl net.ipv4.ip_forward=1 someimage 1130 1131 Note: 1132 1133 Not all sysctls are namespaced. Docker does not support changing sysctls 1134 inside of a container that also modify the host system. As the kernel 1135 evolves we expect to see more sysctls become namespaced. 1136 1137 See the definition of the `--sysctl` option above for the current list of 1138 supported sysctls. 1139 1140 # HISTORY 1141 April 2014, Originally compiled by William Henry (whenry at redhat dot com) 1142 based on docker.com source material and internal work. 1143 June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au> 1144 July 2014, updated by Sven Dowideit <SvenDowideit@home.org.au> 1145 November 2015, updated by Sally O'Malley <somalley@redhat.com>