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