github.com/mheon/docker@v0.11.2-0.20150922122814-44f47903a831/man/docker-run.1.md (about) 1 % DOCKER(1) Docker User Manuals 2 % Docker Community 3 % JUNE 2014 4 # NAME 5 docker-run - Run a command in a new container 6 7 # SYNOPSIS 8 **docker run** 9 [**-a**|**--attach**[=*[]*]] 10 [**--add-host**[=*[]*]] 11 [**--blkio-weight**[=*[BLKIO-WEIGHT]*]] 12 [**-c**|**--cpu-shares**[=*0*]] 13 [**--cap-add**[=*[]*]] 14 [**--cap-drop**[=*[]*]] 15 [**--cgroup-parent**[=*CGROUP-PATH*]] 16 [**--cidfile**[=*CIDFILE*]] 17 [**--cpu-period**[=*0*]] 18 [**--cpu-quota**[=*0*]] 19 [**--cpuset-cpus**[=*CPUSET-CPUS*]] 20 [**--cpuset-mems**[=*CPUSET-MEMS*]] 21 [**-d**|**--detach**[=*false*]] 22 [**--device**[=*[]*]] 23 [**--dns**[=*[]*]] 24 [**--dns-opt**[=*[]*]] 25 [**--dns-search**[=*[]*]] 26 [**-e**|**--env**[=*[]*]] 27 [**--entrypoint**[=*ENTRYPOINT*]] 28 [**--env-file**[=*[]*]] 29 [**--expose**[=*[]*]] 30 [**--group-add**[=*[]*]] 31 [**-h**|**--hostname**[=*HOSTNAME*]] 32 [**--help**] 33 [**-i**|**--interactive**[=*false*]] 34 [**--ipc**[=*IPC*]] 35 [**--kernel-memory**[=*KERNEL-MEMORY*]] 36 [**-l**|**--label**[=*[]*]] 37 [**--label-file**[=*[]*]] 38 [**--link**[=*[]*]] 39 [**--log-driver**[=*[]*]] 40 [**--log-opt**[=*[]*]] 41 [**--lxc-conf**[=*[]*]] 42 [**-m**|**--memory**[=*MEMORY*]] 43 [**--mac-address**[=*MAC-ADDRESS*]] 44 [**--memory-swap**[=*MEMORY-SWAP*]] 45 [**--memory-swappiness**[=*MEMORY-SWAPPINESS*]] 46 [**--name**[=*NAME*]] 47 [**--net**[=*"bridge"*]] 48 [**--oom-kill-disable**[=*false*]] 49 [**-P**|**--publish-all**[=*false*]] 50 [**-p**|**--publish**[=*[]*]] 51 [**--pid**[=*[]*]] 52 [**--privileged**[=*false*]] 53 [**--read-only**[=*false*]] 54 [**--restart**[=*RESTART*]] 55 [**--rm**[=*false*]] 56 [**--security-opt**[=*[]*]] 57 [**--stop-signal**[=*SIGNAL*]] 58 [**--sig-proxy**[=*true*]] 59 [**-t**|**--tty**[=*false*]] 60 [**-u**|**--user**[=*USER*]] 61 [**-v**|**--volume**[=*[]*]] 62 [**--ulimit**[=*[]*]] 63 [**--uts**[=*[]*]] 64 [**--volumes-from**[=*[]*]] 65 [**-w**|**--workdir**[=*WORKDIR*]] 66 IMAGE [COMMAND] [ARG...] 67 68 # DESCRIPTION 69 70 Run a process in a new container. **docker run** starts a process with its own 71 file system, its own networking, and its own isolated process tree. The IMAGE 72 which starts the process may define defaults related to the process that will be 73 run in the container, the networking to expose, and more, but **docker run** 74 gives final control to the operator or administrator who starts the container 75 from the image. For that reason **docker run** has more options than any other 76 Docker command. 77 78 If the IMAGE is not already loaded then **docker run** will pull the IMAGE, and 79 all image dependencies, from the repository in the same way running **docker 80 pull** IMAGE, before it starts the container from that image. 81 82 # OPTIONS 83 **-a**, **--attach**=[] 84 Attach to STDIN, STDOUT or STDERR. 85 86 In foreground mode (the default when **-d** 87 is not specified), **docker run** can start the process in the container 88 and attach the console to the process’s standard input, output, and standard 89 error. It can even pretend to be a TTY (this is what most commandline 90 executables expect) and pass along signals. The **-a** option can be set for 91 each of stdin, stdout, and stderr. 92 93 **--add-host**=[] 94 Add a custom host-to-IP mapping (host:ip) 95 96 Add a line to /etc/hosts. The format is hostname:ip. The **--add-host** 97 option can be set multiple times. 98 99 **--blkio-weight**=0 100 Block IO weight (relative weight) accepts a weight value between 10 and 1000. 101 102 **-c**, **--cpu-shares**=0 103 CPU shares (relative weight) 104 105 By default, all containers get the same proportion of CPU cycles. This proportion 106 can be modified by changing the container's CPU share weighting relative 107 to the weighting of all other running containers. 108 109 To modify the proportion from the default of 1024, use the **-c** or **--cpu-shares** 110 flag to set the weighting to 2 or higher. 111 112 The proportion will only apply when CPU-intensive processes are running. 113 When tasks in one container are idle, other containers can use the 114 left-over CPU time. The actual amount of CPU time will vary depending on 115 the number of containers running on the system. 116 117 For example, consider three containers, one has a cpu-share of 1024 and 118 two others have a cpu-share setting of 512. When processes in all three 119 containers attempt to use 100% of CPU, the first container would receive 120 50% of the total CPU time. If you add a fourth container with a cpu-share 121 of 1024, the first container only gets 33% of the CPU. The remaining containers 122 receive 16.5%, 16.5% and 33% of the CPU. 123 124 On a multi-core system, the shares of CPU time are distributed over all CPU 125 cores. Even if a container is limited to less than 100% of CPU time, it can 126 use 100% of each individual CPU core. 127 128 For example, consider a system with more than three cores. If you start one 129 container **{C0}** with **-c=512** running one process, and another container 130 **{C1}** with **-c=1024** running two processes, this can result in the following 131 division of CPU shares: 132 133 PID container CPU CPU share 134 100 {C0} 0 100% of CPU0 135 101 {C1} 1 100% of CPU1 136 102 {C1} 2 100% of CPU2 137 138 **--cap-add**=[] 139 Add Linux capabilities 140 141 **--cap-drop**=[] 142 Drop Linux capabilities 143 144 **--cgroup-parent**="" 145 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. 146 147 **--cidfile**="" 148 Write the container ID to the file 149 150 **--cpu-period**=0 151 Limit the CPU CFS (Completely Fair Scheduler) period 152 153 Limit the container's CPU usage. This flag tell the kernel to restrict the container's CPU usage to the period you specify. 154 155 **--cpuset-cpus**="" 156 CPUs in which to allow execution (0-3, 0,1) 157 158 **--cpuset-mems**="" 159 Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. 160 161 If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1` 162 then processes in your Docker container will only use memory from the first 163 two memory nodes. 164 165 **--cpu-quota**=0 166 Limit the CPU CFS (Completely Fair Scheduler) quota 167 168 Limit the container's CPU usage. By default, containers run with the full 169 CPU resource. This flag tell the kernel to restrict the container's CPU usage 170 to the quota you specify. 171 172 **-d**, **--detach**=*true*|*false* 173 Detached mode: run the container in the background and print the new container ID. The default is *false*. 174 175 At any time you can run **docker ps** in 176 the other shell to view a list of the running containers. You can reattach to a 177 detached container with **docker attach**. If you choose to run a container in 178 the detached mode, then you cannot use the **-rm** option. 179 180 When attached in the tty mode, you can detach from a running container without 181 stopping the process by pressing the keys CTRL-P CTRL-Q. 182 183 **--device**=[] 184 Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) 185 186 **--dns-search**=[] 187 Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) 188 189 **--dns-opt**=[] 190 Set custom DNS options 191 192 **--dns**=[] 193 Set custom DNS servers 194 195 This option can be used to override the DNS 196 configuration passed to the container. Typically this is necessary when the 197 host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this 198 is the case the **--dns** flags is necessary for every run. 199 200 **-e**, **--env**=[] 201 Set environment variables 202 203 This option allows you to specify arbitrary 204 environment variables that are available for the process that will be launched 205 inside of the container. 206 207 **--entrypoint**="" 208 Overwrite the default ENTRYPOINT of the image 209 210 This option allows you to overwrite the default entrypoint of the image that 211 is set in the Dockerfile. The ENTRYPOINT of an image is similar to a COMMAND 212 because it specifies what executable to run when the container starts, but it is 213 (purposely) more difficult to override. The ENTRYPOINT gives a container its 214 default nature or behavior, so that when you set an ENTRYPOINT you can run the 215 container as if it were that binary, complete with default options, and you can 216 pass in more options via the COMMAND. But, sometimes an operator may want to run 217 something else inside the container, so you can override the default ENTRYPOINT 218 at runtime by using a **--entrypoint** and a string to specify the new 219 ENTRYPOINT. 220 221 **--env-file**=[] 222 Read in a line delimited file of environment variables 223 224 **--expose**=[] 225 Expose a port, or a range of ports (e.g. --expose=3300-3310), from the container without publishing it to your host 226 227 **--group-add**=[] 228 Add additional groups to run as 229 230 **-h**, **--hostname**="" 231 Container host name 232 233 Sets the container host name that is available inside the container. 234 235 **--help** 236 Print usage statement 237 238 **-i**, **--interactive**=*true*|*false* 239 Keep STDIN open even if not attached. The default is *false*. 240 241 When set to true, keep stdin open even if not attached. The default is false. 242 243 **--ipc**="" 244 Default is to create a private IPC namespace (POSIX SysV IPC) for the container 245 'container:<name|id>': reuses another container shared memory, semaphores and message queues 246 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. 247 248 **-l**, **--label**=[] 249 Set metadata on the container (e.g., --label com.example.key=value) 250 251 **--kernel-memory**="" 252 Kernel memory limit (format: `<number>[<unit>]`, where unit = b, k, m or g) 253 254 Constrains the kernel memory available to a container. If a limit of 0 255 is specified (not using `--kernel-memory`), the container's kernel memory 256 is not limited. If you specify a limit, it may be rounded up to a multiple 257 of the operating system's page size and the value can be very large, 258 millions of trillions. 259 260 **--label-file**=[] 261 Read in a line delimited file of labels 262 263 **--link**=[] 264 Add link to another container in the form of <name or id>:alias or just <name or id> 265 in which case the alias will match the name 266 267 If the operator 268 uses **--link** when starting the new client container, then the client 269 container can access the exposed port via a private networking interface. Docker 270 will set some environment variables in the client container to help indicate 271 which interface and port to use. 272 273 **--lxc-conf**=[] 274 (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" 275 276 **--log-driver**="|*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*none*" 277 Logging driver for container. Default is defined by daemon `--log-driver` flag. 278 **Warning**: the `docker logs` command works only for the `json-file` and 279 `journald` logging drivers. 280 281 **--log-opt**=[] 282 Logging driver specific options. 283 284 **-m**, **--memory**="" 285 Memory limit (format: <number>[<unit>], where unit = b, k, m or g) 286 287 Allows you to constrain the memory available to a container. If the host 288 supports swap memory, then the **-m** memory setting can be larger than physical 289 RAM. If a limit of 0 is specified (not using **-m**), the container's memory is 290 not limited. The actual limit may be rounded up to a multiple of the operating 291 system's page size (the value would be very large, that's millions of trillions). 292 293 **--memory-swap**="" 294 Total memory limit (memory + swap) 295 296 Set `-1` to disable swap (format: <number>[<unit>], where unit = b, k, m or g). 297 This value should always larger than **-m**, so you should always use this with **-m**. 298 299 **--mac-address**="" 300 Container MAC address (e.g. 92:d0:c6:0a:29:33) 301 302 Remember that the MAC address in an Ethernet network must be unique. 303 The IPv6 link-local address will be based on the device's MAC address 304 according to RFC4862. 305 306 **--name**="" 307 Assign a name to the container 308 309 The operator can identify a container in three ways: 310 UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”) 311 UUID short identifier (“f78375b1c487”) 312 Name (“jonah”) 313 314 The UUID identifiers come from the Docker daemon, and if a name is not assigned 315 to the container with **--name** then the daemon will also generate a random 316 string name. The name is useful when defining links (see **--link**) (or any 317 other place you need to identify a container). This works for both background 318 and foreground Docker containers. 319 320 **--net**="bridge" 321 Set the Network mode for the container 322 'bridge': creates a new network stack for the container on the docker bridge 323 'none': no networking for this container 324 'container:<name|id>': reuses another container network stack 325 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. 326 327 **--oom-kill-disable**=*true*|*false* 328 Whether to disable OOM Killer for the container or not. 329 330 **-P**, **--publish-all**=*true*|*false* 331 Publish all exposed ports to random ports on the host interfaces. The default is *false*. 332 333 When set to true publish all exposed ports to the host interfaces. The 334 default is false. If the operator uses -P (or -p) then Docker will make the 335 exposed port accessible on the host and the ports will be available to any 336 client that can reach the host. When using -P, Docker will bind any exposed 337 port to a random port on the host within an *ephemeral port range* defined by 338 `/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host 339 ports and the exposed ports, use `docker port`. 340 341 **-p**, **--publish**=[] 342 Publish a container's port, or range of ports, to the host. 343 format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort 344 Both hostPort and containerPort can be specified as a range of ports. 345 When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. (e.g., `-p 1234-1236:1234-1236/tcp`) 346 (use 'docker port' to see the actual mapping) 347 348 **--pid**=host 349 Set the PID mode for the container 350 **host**: use the host's PID namespace inside the container. 351 Note: the host mode gives the container full access to local PID and is therefore considered insecure. 352 353 **--uts**=host 354 Set the UTS mode for the container 355 **host**: use the host's UTS namespace inside the container. 356 Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure. 357 358 **--privileged**=*true*|*false* 359 Give extended privileges to this container. The default is *false*. 360 361 By default, Docker containers are 362 “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the 363 Docker container. This is because by default a container is not allowed to 364 access any devices. A “privileged” container is given access to all devices. 365 366 When the operator executes **docker run --privileged**, Docker will enable access 367 to all devices on the host as well as set some configuration in AppArmor to 368 allow the container nearly all the same access to the host as processes running 369 outside of a container on the host. 370 371 **--read-only**=*true*|*false* 372 Mount the container's root filesystem as read only. 373 374 By default a container will have its root filesystem writable allowing processes 375 to write files anywhere. By specifying the `--read-only` flag the container will have 376 its root filesystem mounted as read only prohibiting any writes. 377 378 **--restart**="no" 379 Restart policy to apply when a container exits (no, on-failure[:max-retry], always, unless-stopped). 380 381 **--rm**=*true*|*false* 382 Automatically remove the container when it exits (incompatible with -d). The default is *false*. 383 384 **--security-opt**=[] 385 Security Options 386 387 "label:user:USER" : Set the label user for the container 388 "label:role:ROLE" : Set the label role for the container 389 "label:type:TYPE" : Set the label type for the container 390 "label:level:LEVEL" : Set the label level for the container 391 "label:disable" : Turn off label confinement for the container 392 393 **--stop-signal**=SIGTERM 394 Signal to stop a container. Default is SIGTERM. 395 396 **--sig-proxy**=*true*|*false* 397 Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true*. 398 399 **--memory-swappiness**="" 400 Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. 401 402 **-t**, **--tty**=*true*|*false* 403 Allocate a pseudo-TTY. The default is *false*. 404 405 When set to true Docker can allocate a pseudo-tty and attach to the standard 406 input of any container. This can be used, for example, to run a throwaway 407 interactive shell. The default is value is false. 408 409 The **-t** option is incompatible with a redirection of the docker client 410 standard input. 411 412 **-u**, **--user**="" 413 Sets the username or UID used and optionally the groupname or GID for the specified command. 414 415 The followings examples are all valid: 416 --user [user | user:group | uid | uid:gid | user:gid | uid:group ] 417 418 Without this argument the command will be run as root in the container. 419 420 ""--ulimit""=[] 421 Ulimit options 422 423 **-v**, **--volume**=[] 424 Bind mount a volume (e.g., from the host: -v /host:/container, from Docker: -v /container) 425 426 The **-v** option can be used one or 427 more times to add one or more mounts to a container. These mounts can then be 428 used in other containers using the **--volumes-from** option. 429 430 The volume may be optionally suffixed with :ro or :rw to mount the volumes in 431 read-only or read-write mode, respectively. By default, the volumes are mounted 432 read-write. See examples. 433 434 Labeling systems like SELinux require that proper labels are placed on volume 435 content mounted into a container. Without a label, the security system might 436 prevent the processes running inside the container from using the content. By 437 default, Docker does not change the labels set by the OS. 438 439 To change a label in the container context, you can add either of two suffixes 440 `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file 441 objects on the shared volumes. The `z` option tells Docker that two containers 442 share the volume content. As a result, Docker labels the content with a shared 443 content label. Shared volume labels allow all containers to read/write content. 444 The `Z` option tells Docker to label the content with a private unshared label. 445 Only the current container can use a private volume. 446 447 The `container-dir` must always be an absolute path such as `/src/docs`. 448 The `host-dir` can either be an absolute path or a `name` value. If you 449 supply an absolute path for the `host-dir`, Docker bind-mounts to the path 450 you specify. If you supply a `name`, Docker creates a named volume by that `name`. 451 452 A `name` value must start with start with an alphanumeric character, 453 followed by `a-z0-9`, `_` (underscore), `.` (period) or `-` (hyphen). 454 An absolute path starts with a `/` (forward slash). 455 456 For example, you can specify either `/foo` or `foo` for a `host-dir` value. 457 If you supply the `/foo` value, Docker creates a bind-mount. If you supply 458 the `foo` specification, Docker creates a named volume. 459 460 **Note:** Multiple Volume options can be added separated by a , (comma). 461 462 **--volumes-from**=[] 463 Mount volumes from the specified container(s) 464 465 Mounts already mounted volumes from a source container onto another 466 container. You must supply the source's container-id. To share 467 a volume, use the **--volumes-from** option when running 468 the target container. You can share volumes even if the source container 469 is not running. 470 471 By default, Docker mounts the volumes in the same mode (read-write or 472 read-only) as it is mounted in the source container. Optionally, you 473 can change this by suffixing the container-id with either the `:ro` or 474 `:rw ` keyword. 475 476 If the location of the volume from the source container overlaps with 477 data residing on a target container, then the volume hides 478 that data on the target. 479 480 **-w**, **--workdir**="" 481 Working directory inside the container 482 483 The default working directory for 484 running binaries within a container is the root directory (/). The developer can 485 set a different default with the Dockerfile WORKDIR instruction. The operator 486 can override the working directory by using the **-w** option. 487 488 # EXAMPLES 489 490 ## Exposing log messages from the container to the host's log 491 492 If you want messages that are logged in your container to show up in the host's 493 syslog/journal then you should bind mount the /dev/log directory as follows. 494 495 # docker run -v /dev/log:/dev/log -i -t fedora /bin/bash 496 497 From inside the container you can test this by sending a message to the log. 498 499 (bash)# logger "Hello from my container" 500 501 Then exit and check the journal. 502 503 # exit 504 505 # journalctl -b | grep Hello 506 507 This should list the message sent to logger. 508 509 ## Attaching to one or more from STDIN, STDOUT, STDERR 510 511 If you do not specify -a then Docker will attach everything (stdin,stdout,stderr) 512 . You can specify to which of the three standard streams (stdin, stdout, stderr) 513 you’d like to connect instead, as in: 514 515 # docker run -a stdin -a stdout -i -t fedora /bin/bash 516 517 ## Sharing IPC between containers 518 519 Using shm_server.c available here: https://www.cs.cf.ac.uk/Dave/C/node27.html 520 521 Testing `--ipc=host` mode: 522 523 Host shows a shared memory segment with 7 pids attached, happens to be from httpd: 524 525 ``` 526 $ sudo ipcs -m 527 528 ------ Shared Memory Segments -------- 529 key shmid owner perms bytes nattch status 530 0x01128e25 0 root 600 1000 7 531 ``` 532 533 Now run a regular container, and it correctly does NOT see the shared memory segment from the host: 534 535 ``` 536 $ docker run -it shm ipcs -m 537 538 ------ Shared Memory Segments -------- 539 key shmid owner perms bytes nattch status 540 ``` 541 542 Run a container with the new `--ipc=host` option, and it now sees the shared memory segment from the host httpd: 543 544 ``` 545 $ docker run -it --ipc=host shm ipcs -m 546 547 ------ Shared Memory Segments -------- 548 key shmid owner perms bytes nattch status 549 0x01128e25 0 root 600 1000 7 550 ``` 551 Testing `--ipc=container:CONTAINERID` mode: 552 553 Start a container with a program to create a shared memory segment: 554 ``` 555 $ docker run -it shm bash 556 $ sudo shm/shm_server & 557 $ sudo ipcs -m 558 559 ------ Shared Memory Segments -------- 560 key shmid owner perms bytes nattch status 561 0x0000162e 0 root 666 27 1 562 ``` 563 Create a 2nd container correctly shows no shared memory segment from 1st container: 564 ``` 565 $ docker run shm ipcs -m 566 567 ------ Shared Memory Segments -------- 568 key shmid owner perms bytes nattch status 569 ``` 570 571 Create a 3rd container using the new --ipc=container:CONTAINERID option, now it shows the shared memory segment from the first: 572 573 ``` 574 $ docker run -it --ipc=container:ed735b2264ac shm ipcs -m 575 $ sudo ipcs -m 576 577 ------ Shared Memory Segments -------- 578 key shmid owner perms bytes nattch status 579 0x0000162e 0 root 666 27 1 580 ``` 581 582 ## Linking Containers 583 584 The link feature allows multiple containers to communicate with each other. For 585 example, a container whose Dockerfile has exposed port 80 can be run and named 586 as follows: 587 588 # docker run --name=link-test -d -i -t fedora/httpd 589 590 A second container, in this case called linker, can communicate with the httpd 591 container, named link-test, by running with the **--link=<name>:<alias>** 592 593 # docker run -t -i --link=link-test:lt --name=linker fedora /bin/bash 594 595 Now the container linker is linked to container link-test with the alias lt. 596 Running the **env** command in the linker container shows environment variables 597 with the LT (alias) context (**LT_**) 598 599 # env 600 HOSTNAME=668231cb0978 601 TERM=xterm 602 LT_PORT_80_TCP=tcp://172.17.0.3:80 603 LT_PORT_80_TCP_PORT=80 604 LT_PORT_80_TCP_PROTO=tcp 605 LT_PORT=tcp://172.17.0.3:80 606 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 607 PWD=/ 608 LT_NAME=/linker/lt 609 SHLVL=1 610 HOME=/ 611 LT_PORT_80_TCP_ADDR=172.17.0.3 612 _=/usr/bin/env 613 614 When linking two containers Docker will use the exposed ports of the container 615 to create a secure tunnel for the parent to access. 616 617 618 ## Mapping Ports for External Usage 619 620 The exposed port of an application can be mapped to a host port using the **-p** 621 flag. For example, a httpd port 80 can be mapped to the host port 8080 using the 622 following: 623 624 # docker run -p 8080:80 -d -i -t fedora/httpd 625 626 ## Creating and Mounting a Data Volume Container 627 628 Many applications require the sharing of persistent data across several 629 containers. Docker allows you to create a Data Volume Container that other 630 containers can mount from. For example, create a named container that contains 631 directories /var/volume1 and /tmp/volume2. The image will need to contain these 632 directories so a couple of RUN mkdir instructions might be required for you 633 fedora-data image: 634 635 # docker run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true 636 # docker run --volumes-from=data --name=fedora-container1 -i -t fedora bash 637 638 Multiple --volumes-from parameters will bring together multiple data volumes from 639 multiple containers. And it's possible to mount the volumes that came from the 640 DATA container in yet another container via the fedora-container1 intermediary 641 container, allowing to abstract the actual data source from users of that data: 642 643 # docker run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash 644 645 ## Mounting External Volumes 646 647 To mount a host directory as a container volume, specify the absolute path to 648 the directory and the absolute path for the container directory separated by a 649 colon: 650 651 # docker run -v /var/db:/data1 -i -t fedora bash 652 653 When using SELinux, be aware that the host has no knowledge of container SELinux 654 policy. Therefore, in the above example, if SELinux policy is enforced, the 655 `/var/db` directory is not writable to the container. A "Permission Denied" 656 message will occur and an avc: message in the host's syslog. 657 658 659 To work around this, at time of writing this man page, the following command 660 needs to be run in order for the proper SELinux policy type label to be attached 661 to the host directory: 662 663 # chcon -Rt svirt_sandbox_file_t /var/db 664 665 666 Now, writing to the /data1 volume in the container will be allowed and the 667 changes will also be reflected on the host in /var/db. 668 669 ## Using alternative security labeling 670 671 You can override the default labeling scheme for each container by specifying 672 the `--security-opt` flag. For example, you can specify the MCS/MLS level, a 673 requirement for MLS systems. Specifying the level in the following command 674 allows you to share the same content between containers. 675 676 # docker run --security-opt label:level:s0:c100,c200 -i -t fedora bash 677 678 An MLS example might be: 679 680 # docker run --security-opt label:level:TopSecret -i -t rhel7 bash 681 682 To disable the security labeling for this container versus running with the 683 `--permissive` flag, use the following command: 684 685 # docker run --security-opt label:disable -i -t fedora bash 686 687 If you want a tighter security policy on the processes within a container, 688 you can specify an alternate type for the container. You could run a container 689 that is only allowed to listen on Apache ports by executing the following 690 command: 691 692 # docker run --security-opt label:type:svirt_apache_t -i -t centos bash 693 694 Note: 695 696 You would have to write policy defining a `svirt_apache_t` type. 697 698 # HISTORY 699 April 2014, Originally compiled by William Henry (whenry at redhat dot com) 700 based on docker.com source material and internal work. 701 June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au> 702 July 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>