github.com/endocode/docker@v1.4.2-0.20160113120958-46eb4700391e/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  [**--blkio-weight-device**[=*[]*]]
    13  [**--cpu-shares**[=*0*]]
    14  [**--cap-add**[=*[]*]]
    15  [**--cap-drop**[=*[]*]]
    16  [**--cgroup-parent**[=*CGROUP-PATH*]]
    17  [**--cidfile**[=*CIDFILE*]]
    18  [**--cpu-period**[=*0*]]
    19  [**--cpu-quota**[=*0*]]
    20  [**--cpuset-cpus**[=*CPUSET-CPUS*]]
    21  [**--cpuset-mems**[=*CPUSET-MEMS*]]
    22  [**-d**|**--detach**]
    23  [**--detach-keys**[=*[]*]]
    24  [**--device**[=*[]*]]
    25  [**--device-read-bps**[=*[]*]]
    26  [**--device-read-iops**[=*[]*]]
    27  [**--device-write-bps**[=*[]*]]
    28  [**--device-write-iops**[=*[]*]]
    29  [**--dns**[=*[]*]]
    30  [**--dns-opt**[=*[]*]]
    31  [**--dns-search**[=*[]*]]
    32  [**-e**|**--env**[=*[]*]]
    33  [**--entrypoint**[=*ENTRYPOINT*]]
    34  [**--env-file**[=*[]*]]
    35  [**--expose**[=*[]*]]
    36  [**--group-add**[=*[]*]]
    37  [**-h**|**--hostname**[=*HOSTNAME*]]
    38  [**--help**]
    39  [**-i**|**--interactive**]
    40  [**--ipc**[=*IPC*]]
    41  [**--isolation**[=*default*]]
    42  [**--kernel-memory**[=*KERNEL-MEMORY*]]
    43  [**-l**|**--label**[=*[]*]]
    44  [**--label-file**[=*[]*]]
    45  [**--link**[=*[]*]]
    46  [**--log-driver**[=*[]*]]
    47  [**--log-opt**[=*[]*]]
    48  [**-m**|**--memory**[=*MEMORY*]]
    49  [**--mac-address**[=*MAC-ADDRESS*]]
    50  [**--memory-reservation**[=*MEMORY-RESERVATION*]]
    51  [**--memory-swap**[=*LIMIT*]]
    52  [**--memory-swappiness**[=*MEMORY-SWAPPINESS*]]
    53  [**--name**[=*NAME*]]
    54  [**--net**[=*"bridge"*]]
    55  [**--oom-kill-disable**]
    56  [**--oom-score-adj**[=*0*]]
    57  [**-P**|**--publish-all**]
    58  [**-p**|**--publish**[=*[]*]]
    59  [**--pid**[=*[]*]]
    60  [**--privileged**]
    61  [**--read-only**]
    62  [**--restart**[=*RESTART*]]
    63  [**--rm**]
    64  [**--security-opt**[=*[]*]]
    65  [**--stop-signal**[=*SIGNAL*]]
    66  [**--shm-size**[=*[]*]]
    67  [**--sig-proxy**[=*true*]]
    68  [**-t**|**--tty**]
    69  [**--tmpfs**[=*[CONTAINER-DIR[:<OPTIONS>]*]]
    70  [**-u**|**--user**[=*USER*]]
    71  [**--ulimit**[=*[]*]]
    72  [**--uts**[=*[]*]]
    73  [**-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*]]
    74  [**--volume-driver**[=*DRIVER*]]
    75  [**--volumes-from**[=*[]*]]
    76  [**-w**|**--workdir**[=*WORKDIR*]]
    77  IMAGE [COMMAND] [ARG...]
    78  
    79  # DESCRIPTION
    80  
    81  Run a process in a new container. **docker run** starts a process with its own
    82  file system, its own networking, and its own isolated process tree. The IMAGE
    83  which starts the process may define defaults related to the process that will be
    84  run in the container, the networking to expose, and more, but **docker run**
    85  gives final control to the operator or administrator who starts the container
    86  from the image. For that reason **docker run** has more options than any other
    87  Docker command.
    88  
    89  If the IMAGE is not already loaded then **docker run** will pull the IMAGE, and
    90  all image dependencies, from the repository in the same way running **docker
    91  pull** IMAGE, before it starts the container from that image.
    92  
    93  # OPTIONS
    94  **-a**, **--attach**=[]
    95     Attach to STDIN, STDOUT or STDERR.
    96  
    97     In foreground mode (the default when **-d**
    98  is not specified), **docker run** can start the process in the container
    99  and attach the console to the process’s standard input, output, and standard
   100  error. It can even pretend to be a TTY (this is what most commandline
   101  executables expect) and pass along signals. The **-a** option can be set for
   102  each of stdin, stdout, and stderr.
   103  
   104  **--add-host**=[]
   105     Add a custom host-to-IP mapping (host:ip)
   106  
   107     Add a line to /etc/hosts. The format is hostname:ip.  The **--add-host**
   108  option can be set multiple times.
   109  
   110  **--blkio-weight**=*0*
   111     Block IO weight (relative weight) accepts a weight value between 10 and 1000.
   112  
   113  **--blkio-weight-device**=[]
   114     Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`).
   115  
   116  **--cpu-shares**=*0*
   117     CPU shares (relative weight)
   118  
   119     By default, all containers get the same proportion of CPU cycles. This proportion
   120  can be modified by changing the container's CPU share weighting relative
   121  to the weighting of all other running containers.
   122  
   123  To modify the proportion from the default of 1024, use the **--cpu-shares**
   124  flag to set the weighting to 2 or higher.
   125  
   126  The proportion will only apply when CPU-intensive processes are running.
   127  When tasks in one container are idle, other containers can use the
   128  left-over CPU time. The actual amount of CPU time will vary depending on
   129  the number of containers running on the system.
   130  
   131  For example, consider three containers, one has a cpu-share of 1024 and
   132  two others have a cpu-share setting of 512. When processes in all three
   133  containers attempt to use 100% of CPU, the first container would receive
   134  50% of the total CPU time. If you add a fourth container with a cpu-share
   135  of 1024, the first container only gets 33% of the CPU. The remaining containers
   136  receive 16.5%, 16.5% and 33% of the CPU.
   137  
   138  On a multi-core system, the shares of CPU time are distributed over all CPU
   139  cores. Even if a container is limited to less than 100% of CPU time, it can
   140  use 100% of each individual CPU core.
   141  
   142  For example, consider a system with more than three cores. If you start one
   143  container **{C0}** with **-c=512** running one process, and another container
   144  **{C1}** with **-c=1024** running two processes, this can result in the following
   145  division of CPU shares:
   146  
   147      PID    container	CPU	CPU share
   148      100    {C0}		0	100% of CPU0
   149      101    {C1}		1	100% of CPU1
   150      102    {C1}		2	100% of CPU2
   151  
   152  **--cap-add**=[]
   153     Add Linux capabilities
   154  
   155  **--cap-drop**=[]
   156     Drop Linux capabilities
   157  
   158  **--cgroup-parent**=""
   159     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.
   160  
   161  **--cidfile**=""
   162     Write the container ID to the file
   163  
   164  **--cpu-period**=*0*
   165     Limit the CPU CFS (Completely Fair Scheduler) period
   166  
   167     Limit the container's CPU usage. This flag tell the kernel to restrict the container's CPU usage to the period you specify.
   168  
   169  **--cpuset-cpus**=""
   170     CPUs in which to allow execution (0-3, 0,1)
   171  
   172  **--cpuset-mems**=""
   173     Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
   174  
   175     If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1`
   176  then processes in your Docker container will only use memory from the first
   177  two memory nodes.
   178  
   179  **--cpu-quota**=*0*
   180     Limit the CPU CFS (Completely Fair Scheduler) quota
   181  
   182     Limit the container's CPU usage. By default, containers run with the full
   183  CPU resource. This flag tell the kernel to restrict the container's CPU usage
   184  to the quota you specify.
   185  
   186  **-d**, **--detach**=*true*|*false*
   187     Detached mode: run the container in the background and print the new container ID. The default is *false*.
   188  
   189     At any time you can run **docker ps** in
   190  the other shell to view a list of the running containers. You can reattach to a
   191  detached container with **docker attach**. If you choose to run a container in
   192  the detached mode, then you cannot use the **-rm** option.
   193  
   194     When attached in the tty mode, you can detach from the container (and leave it
   195  running) using a configurable key sequence. The default sequence is `CTRL-p CTRL-q`.
   196  You configure the key sequence using the **--detach-keys** option or a configuration file.
   197  See **config-json(5)** for documentation on using a configuration file.
   198  
   199  **--detach-keys**=""
   200     Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.
   201  
   202  **--device**=[]
   203     Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)
   204  
   205  **--device-read-bps**=[]
   206     Limit read rate from a device (e.g. --device-read-bps=/dev/sda:1mb)
   207  
   208  **--device-read-iops**=[]
   209     Limit read rate from a device (e.g. --device-read-iops=/dev/sda:1000)
   210  
   211  **--device-write-bps**=[]
   212     Limit write rate to a device (e.g. --device-write-bps=/dev/sda:1mb)
   213  
   214  **--device-write-iops**=[]
   215     Limit write rate a a device (e.g. --device-write-iops=/dev/sda:1000)
   216  
   217  **--dns-search**=[]
   218     Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain)
   219  
   220  **--dns-opt**=[]
   221     Set custom DNS options
   222  
   223  **--dns**=[]
   224     Set custom DNS servers
   225  
   226     This option can be used to override the DNS
   227  configuration passed to the container. Typically this is necessary when the
   228  host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this
   229  is the case the **--dns** flags is necessary for every run.
   230  
   231  **-e**, **--env**=[]
   232     Set environment variables
   233  
   234     This option allows you to specify arbitrary
   235  environment variables that are available for the process that will be launched
   236  inside of the container.
   237  
   238  **--entrypoint**=""
   239     Overwrite the default ENTRYPOINT of the image
   240  
   241     This option allows you to overwrite the default entrypoint of the image that
   242  is set in the Dockerfile. The ENTRYPOINT of an image is similar to a COMMAND
   243  because it specifies what executable to run when the container starts, but it is
   244  (purposely) more difficult to override. The ENTRYPOINT gives a container its
   245  default nature or behavior, so that when you set an ENTRYPOINT you can run the
   246  container as if it were that binary, complete with default options, and you can
   247  pass in more options via the COMMAND. But, sometimes an operator may want to run
   248  something else inside the container, so you can override the default ENTRYPOINT
   249  at runtime by using a **--entrypoint** and a string to specify the new
   250  ENTRYPOINT.
   251  
   252  **--env-file**=[]
   253     Read in a line delimited file of environment variables
   254  
   255  **--expose**=[]
   256     Expose a port, or a range of ports (e.g. --expose=3300-3310) informs Docker
   257  that the container listens on the specified network ports at runtime. Docker
   258  uses this information to interconnect containers using links and to set up port
   259  redirection on the host system.
   260  
   261  **--group-add**=[]
   262     Add additional groups to run as
   263  
   264  **-h**, **--hostname**=""
   265     Container host name
   266  
   267     Sets the container host name that is available inside the container.
   268  
   269  **--help**
   270    Print usage statement
   271  
   272  **-i**, **--interactive**=*true*|*false*
   273     Keep STDIN open even if not attached. The default is *false*.
   274  
   275     When set to true, keep stdin open even if not attached. The default is false.
   276  
   277  **--ipc**=""
   278     Default is to create a private IPC namespace (POSIX SysV IPC) for the container
   279                                 'container:<name|id>': reuses another container shared memory, semaphores and message queues
   280                                 '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.
   281  
   282  **--isolation**="*default*"
   283     Isolation specifies the type of isolation technology used by containers.
   284  
   285  **-l**, **--label**=[]
   286     Set metadata on the container (e.g., --label com.example.key=value)
   287  
   288  **--kernel-memory**=""
   289     Kernel memory limit (format: `<number>[<unit>]`, where unit = b, k, m or g)
   290  
   291     Constrains the kernel memory available to a container. If a limit of 0
   292  is specified (not using `--kernel-memory`), the container's kernel memory
   293  is not limited. If you specify a limit, it may be rounded up to a multiple
   294  of the operating system's page size and the value can be very large,
   295  millions of trillions.
   296  
   297  **--label-file**=[]
   298     Read in a line delimited file of labels
   299  
   300  **--link**=[]
   301     Add link to another container in the form of <name or id>:alias or just <name or id>
   302  in which case the alias will match the name
   303  
   304     If the operator
   305  uses **--link** when starting the new client container, then the client
   306  container can access the exposed port via a private networking interface. Docker
   307  will set some environment variables in the client container to help indicate
   308  which interface and port to use.
   309  
   310  **--log-driver**="*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*splunk*|*none*"
   311    Logging driver for container. Default is defined by daemon `--log-driver` flag.
   312    **Warning**: the `docker logs` command works only for the `json-file` and
   313    `journald` logging drivers.
   314  
   315  **--log-opt**=[]
   316    Logging driver specific options.
   317  
   318  **-m**, **--memory**=""
   319     Memory limit (format: <number>[<unit>], where unit = b, k, m or g)
   320  
   321     Allows you to constrain the memory available to a container. If the host
   322  supports swap memory, then the **-m** memory setting can be larger than physical
   323  RAM. If a limit of 0 is specified (not using **-m**), the container's memory is
   324  not limited. The actual limit may be rounded up to a multiple of the operating
   325  system's page size (the value would be very large, that's millions of trillions).
   326  
   327  **--memory-reservation**=""
   328     Memory soft limit (format: <number>[<unit>], where unit = b, k, m or g)
   329  
   330     After setting memory reservation, when the system detects memory contention
   331  or low memory, containers are forced to restrict their consumption to their
   332  reservation. So you should always set the value below **--memory**, otherwise the
   333  hard limit will take precedence. By default, memory reservation will be the same
   334  as memory limit.
   335  
   336  **--memory-swap**="LIMIT"
   337     A limit value equal to memory plus swap. Must be used with the  **-m**
   338  (**--memory**) flag. The swap `LIMIT` should always be larger than **-m**
   339  (**--memory**) value.
   340  
   341     The format of `LIMIT` is `<number>[<unit>]`. Unit can be `b` (bytes),
   342  `k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you don't specify a
   343  unit, `b` is used. Set LIMIT to `-1` to enable unlimited swap.
   344  
   345  **--mac-address**=""
   346     Container MAC address (e.g. 92:d0:c6:0a:29:33)
   347  
   348     Remember that the MAC address in an Ethernet network must be unique.
   349  The IPv6 link-local address will be based on the device's MAC address
   350  according to RFC4862.
   351  
   352  **--name**=""
   353     Assign a name to the container
   354  
   355     The operator can identify a container in three ways:
   356      UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”)
   357      UUID short identifier (“f78375b1c487”)
   358      Name (“jonah”)
   359  
   360     The UUID identifiers come from the Docker daemon, and if a name is not assigned
   361  to the container with **--name** then the daemon will also generate a random
   362  string name. The name is useful when defining links (see **--link**) (or any
   363  other place you need to identify a container). This works for both background
   364  and foreground Docker containers.
   365  
   366  **--net**="*bridge*"
   367     Set the Network mode for the container
   368                                 'bridge': create a network stack on the default Docker bridge
   369                                 'none': no networking
   370                                 'container:<name|id>': reuse another container's network stack
   371                                 'host': use the Docker host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.
   372                                 '<network-name>|<network-id>': connect to a user-defined network
   373  
   374  **--oom-kill-disable**=*true*|*false*
   375     Whether to disable OOM Killer for the container or not.
   376  
   377  **--oom-score-adj**=""
   378     Tune the host's OOM preferences for containers (accepts -1000 to 1000)
   379  
   380  **-P**, **--publish-all**=*true*|*false*
   381     Publish all exposed ports to random ports on the host interfaces. The default is *false*.
   382  
   383     When set to true publish all exposed ports to the host interfaces. The
   384  default is false. If the operator uses -P (or -p) then Docker will make the
   385  exposed port accessible on the host and the ports will be available to any
   386  client that can reach the host. When using -P, Docker will bind any exposed
   387  port to a random port on the host within an *ephemeral port range* defined by
   388  `/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host
   389  ports and the exposed ports, use `docker port`.
   390  
   391  **-p**, **--publish**=[]
   392     Publish a container's port, or range of ports, to the host.
   393  
   394     Format: `ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort`
   395  Both hostPort and containerPort can be specified as a range of ports.
   396  When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range.
   397  (e.g., `docker run -p 1234-1236:1222-1224 --name thisWorks -t busybox`
   398  but not `docker run -p 1230-1236:1230-1240 --name RangeContainerPortsBiggerThanRangeHostPorts -t busybox`)
   399  With ip: `docker run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT --name CONTAINER -t someimage`
   400  Use `docker port` to see the actual mapping: `docker port CONTAINER $CONTAINERPORT`
   401  
   402  **--pid**=*host*
   403     Set the PID mode for the container
   404       **host**: use the host's PID namespace inside the container.
   405       Note: the host mode gives the container full access to local PID and is therefore considered insecure.
   406  
   407  **--uts**=*host*
   408     Set the UTS mode for the container
   409       **host**: use the host's UTS namespace inside the container.
   410       Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure.
   411  
   412  **--privileged**=*true*|*false*
   413     Give extended privileges to this container. The default is *false*.
   414  
   415     By default, Docker containers are
   416  “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the
   417  Docker container. This is because by default a container is not allowed to
   418  access any devices. A “privileged” container is given access to all devices.
   419  
   420     When the operator executes **docker run --privileged**, Docker will enable access
   421  to all devices on the host as well as set some configuration in AppArmor to
   422  allow the container nearly all the same access to the host as processes running
   423  outside of a container on the host.
   424  
   425  **--read-only**=*true*|*false*
   426     Mount the container's root filesystem as read only.
   427  
   428     By default a container will have its root filesystem writable allowing processes
   429  to write files anywhere.  By specifying the `--read-only` flag the container will have
   430  its root filesystem mounted as read only prohibiting any writes.
   431  
   432  **--restart**="*no*"
   433     Restart policy to apply when a container exits (no, on-failure[:max-retry], always, unless-stopped).
   434  
   435  **--rm**=*true*|*false*
   436     Automatically remove the container when it exits (incompatible with -d). The default is *false*.
   437  
   438  **--security-opt**=[]
   439     Security Options
   440  
   441     "label:user:USER"   : Set the label user for the container
   442      "label:role:ROLE"   : Set the label role for the container
   443      "label:type:TYPE"   : Set the label type for the container
   444      "label:level:LEVEL" : Set the label level for the container
   445      "label:disable"     : Turn off label confinement for the container
   446  
   447  **--stop-signal**=*SIGTERM*
   448    Signal to stop a container. Default is SIGTERM.
   449  
   450  **--shm-size**=""
   451     Size of `/dev/shm`. The format is `<number><unit>`.
   452     `number` must be greater than `0`.  Unit is optional and can be `b` (bytes), `k` (kilobytes), `m`(megabytes), or `g` (gigabytes).
   453     If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`.
   454  
   455  **--sig-proxy**=*true*|*false*
   456     Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true*.
   457  
   458  **--memory-swappiness**=""
   459     Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.
   460  
   461  **-t**, **--tty**=*true*|*false*
   462     Allocate a pseudo-TTY. The default is *false*.
   463  
   464     When set to true Docker can allocate a pseudo-tty and attach to the standard
   465  input of any container. This can be used, for example, to run a throwaway
   466  interactive shell. The default is false.
   467  
   468  The **-t** option is incompatible with a redirection of the docker client
   469  standard input.
   470  
   471  **--tmpfs**=[] Create a tmpfs mount
   472  
   473     Mount a temporary filesystem (`tmpfs`) mount into a container, for example:
   474  
   475     $ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image
   476  
   477     This command mounts a `tmpfs` at `/tmp` within the container. The mount copies
   478  the underlying content of `my_image` into `/tmp`. For example if there was a
   479  directory `/tmp/content` in the base image, docker will copy this directory and
   480  all of its content on top of the tmpfs mounted on `/tmp`.  The supported mount
   481  options are the same as the Linux default `mount` flags. If you do not specify
   482  any options, the systems uses the following options:
   483  `rw,noexec,nosuid,nodev,size=65536k`.
   484  
   485  **-u**, **--user**=""
   486     Sets the username or UID used and optionally the groupname or GID for the specified command.
   487  
   488     The followings examples are all valid:
   489     --user [user | user:group | uid | uid:gid | user:gid | uid:group ]
   490  
   491     Without this argument the command will be run as root in the container.
   492  
   493  **--ulimit**=[]
   494      Ulimit options
   495  
   496  **-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*]
   497     Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, Docker
   498     bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the Docker
   499     container. If 'HOST-DIR' is omitted,  Docker automatically creates the new
   500     volume on the host.  The `OPTIONS` are a comma delimited list and can be:
   501  
   502     * [rw|ro]
   503     * [z|Z]
   504     * [`[r]shared`|`[r]slave`|`[r]private`]
   505  
   506  The `CONTAINER-DIR` must be an absolute path such as `/src/docs`. The `HOST-DIR`
   507  can be an absolute path or a `name` value. A `name` value must start with an
   508  alphanumeric character, followed by `a-z0-9`, `_` (underscore), `.` (period) or
   509  `-` (hyphen). An absolute path starts with a `/` (forward slash).
   510  
   511  If you supply a `HOST-DIR` that is an absolute path,  Docker bind-mounts to the
   512  path you specify. If you supply a `name`, Docker creates a named volume by that
   513  `name`. For example, you can specify either `/foo` or `foo` for a `HOST-DIR`
   514  value. If you supply the `/foo` value, Docker creates a bind-mount. If you
   515  supply the `foo` specification, Docker creates a named volume.
   516  
   517  You can specify multiple  **-v** options to mount one or more mounts to a
   518  container. To use these same mounts in other containers, specify the
   519  **--volumes-from** option also.
   520  
   521  You can add `:ro` or `:rw` suffix to a volume to mount it  read-only or
   522  read-write mode, respectively. By default, the volumes are mounted read-write.
   523  See examples.
   524  
   525  Labeling systems like SELinux require that proper labels are placed on volume
   526  content mounted into a container. Without a label, the security system might
   527  prevent the processes running inside the container from using the content. By
   528  default, Docker does not change the labels set by the OS.
   529  
   530  To change a label in the container context, you can add either of two suffixes
   531  `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file
   532  objects on the shared volumes. The `z` option tells Docker that two containers
   533  share the volume content. As a result, Docker labels the content with a shared
   534  content label. Shared volume labels allow all containers to read/write content.
   535  The `Z` option tells Docker to label the content with a private unshared label.
   536  Only the current container can use a private volume.
   537  
   538  By default bind mounted volumes are `private`. That means any mounts done
   539  inside container will not be visible on host and vice-a-versa. One can change
   540  this behavior by specifying a volume mount propagation property. Making a
   541  volume `shared` mounts done under that volume inside container will be
   542  visible on host and vice-a-versa. Making a volume `slave` enables only one
   543  way mount propagation and that is mounts done on host under that volume
   544  will be visible inside container but not the other way around.
   545  
   546  To control mount propagation property of volume one can use `:[r]shared`,
   547  `:[r]slave` or `:[r]private` propagation flag. Propagation property can
   548  be specified only for bind mounted volumes and not for internal volumes or
   549  named volumes. For mount propagation to work source mount point (mount point
   550  where source dir is mounted on) has to have right propagation properties. For
   551  shared volumes, source mount point has to be shared. And for slave volumes,
   552  source mount has to be either shared or slave.
   553  
   554  Use `df <source-dir>` to figure out the source mount and then use
   555  `findmnt -o TARGET,PROPAGATION <source-mount-dir>` to figure out propagation
   556  properties of source mount. If `findmnt` utility is not available, then one
   557  can look at mount entry for source mount point in `/proc/self/mountinfo`. Look
   558  at `optional fields` and see if any propagaion properties are specified.
   559  `shared:X` means mount is `shared`, `master:X` means mount is `slave` and if
   560  nothing is there that means mount is `private`.
   561  
   562  To change propagation properties of a mount point use `mount` command. For
   563  example, if one wants to bind mount source directory `/foo` one can do
   564  `mount --bind /foo /foo` and `mount --make-private --make-shared /foo`. This
   565  will convert /foo into a `shared` mount point. Alternatively one can directly
   566  change propagation properties of source mount. Say `/` is source mount for
   567  `/foo`, then use `mount --make-shared /` to convert `/` into a `shared` mount.
   568  
   569  **--volume-driver**=""
   570     Container's volume driver. This driver creates volumes specified either from
   571     a Dockerfile's `VOLUME` instruction or from the `docker run -v` flag.
   572     See **docker-volume-create(1)** for full details.
   573  
   574  **--volumes-from**=[]
   575     Mount volumes from the specified container(s)
   576  
   577     Mounts already mounted volumes from a source container onto another
   578     container. You must supply the source's container-id. To share
   579     a volume, use the **--volumes-from** option when running
   580     the target container. You can share volumes even if the source container
   581     is not running.
   582  
   583     By default, Docker mounts the volumes in the same mode (read-write or
   584     read-only) as it is mounted in the source container. Optionally, you
   585     can change this by suffixing the container-id with either the `:ro` or
   586     `:rw ` keyword.
   587  
   588     If the location of the volume from the source container overlaps with
   589     data residing on a target container, then the volume hides
   590     that data on the target.
   591  
   592  **-w**, **--workdir**=""
   593     Working directory inside the container
   594  
   595     The default working directory for
   596  running binaries within a container is the root directory (/). The developer can
   597  set a different default with the Dockerfile WORKDIR instruction. The operator
   598  can override the working directory by using the **-w** option.
   599  
   600  # Exit Status
   601  
   602  The exit code from `docker run` gives information about why the container
   603  failed to run or why it exited.  When `docker run` exits with a non-zero code,
   604  the exit codes follow the `chroot` standard, see below:
   605  
   606  **_125_** if the error is with Docker daemon **_itself_** 
   607  
   608      $ docker run --foo busybox; echo $?
   609      # flag provided but not defined: --foo
   610        See 'docker run --help'.
   611        125
   612  
   613  **_126_** if the **_contained command_** cannot be invoked
   614  
   615      $ docker run busybox /etc; echo $?
   616      # exec: "/etc": permission denied
   617        docker: Error response from daemon: Contained command could not be invoked
   618        126
   619  
   620  **_127_** if the **_contained command_** cannot be found
   621  
   622      $ docker run busybox foo; echo $?
   623      # exec: "foo": executable file not found in $PATH
   624        docker: Error response from daemon: Contained command not found or does not exist
   625        127
   626  
   627  **_Exit code_** of **_contained command_** otherwise 
   628      
   629      $ docker run busybox /bin/sh -c 'exit 3' 
   630      # 3
   631  
   632  # EXAMPLES
   633  
   634  ## Running container in read-only mode
   635  
   636  During container image development, containers often need to write to the image
   637  content.  Installing packages into /usr, for example.  In production,
   638  applications seldom need to write to the image.  Container applications write
   639  to volumes if they need to write to file systems at all.  Applications can be
   640  made more secure by running them in read-only mode using the --read-only switch.
   641  This protects the containers image from modification. Read only containers may
   642  still need to write temporary data.  The best way to handle this is to mount
   643  tmpfs directories on /run and /tmp.
   644  
   645      # docker run --read-only --tmpfs /run --tmpfs /tmp -i -t fedora /bin/bash
   646  
   647  ## Exposing log messages from the container to the host's log
   648  
   649  If you want messages that are logged in your container to show up in the host's
   650  syslog/journal then you should bind mount the /dev/log directory as follows.
   651  
   652      # docker run -v /dev/log:/dev/log -i -t fedora /bin/bash
   653  
   654  From inside the container you can test this by sending a message to the log.
   655  
   656      (bash)# logger "Hello from my container"
   657  
   658  Then exit and check the journal.
   659  
   660      # exit
   661  
   662      # journalctl -b | grep Hello
   663  
   664  This should list the message sent to logger.
   665  
   666  ## Attaching to one or more from STDIN, STDOUT, STDERR
   667  
   668  If you do not specify -a then Docker will attach everything (stdin,stdout,stderr)
   669  . You can specify to which of the three standard streams (stdin, stdout, stderr)
   670  you’d like to connect instead, as in:
   671  
   672      # docker run -a stdin -a stdout -i -t fedora /bin/bash
   673  
   674  ## Sharing IPC between containers
   675  
   676  Using shm_server.c available here: https://www.cs.cf.ac.uk/Dave/C/node27.html
   677  
   678  Testing `--ipc=host` mode:
   679  
   680  Host shows a shared memory segment with 7 pids attached, happens to be from httpd:
   681  
   682  ```
   683   $ sudo ipcs -m
   684  
   685   ------ Shared Memory Segments --------
   686   key        shmid      owner      perms      bytes      nattch     status      
   687   0x01128e25 0          root       600        1000       7                       
   688  ```
   689  
   690  Now run a regular container, and it correctly does NOT see the shared memory segment from the host:
   691  
   692  ```
   693   $ docker run -it shm ipcs -m
   694  
   695   ------ Shared Memory Segments --------
   696   key        shmid      owner      perms      bytes      nattch     status      
   697  ```
   698  
   699  Run a container with the new `--ipc=host` option, and it now sees the shared memory segment from the host httpd:
   700  
   701   ```
   702   $ docker run -it --ipc=host shm ipcs -m
   703  
   704   ------ Shared Memory Segments --------
   705   key        shmid      owner      perms      bytes      nattch     status      
   706   0x01128e25 0          root       600        1000       7                   
   707  ```
   708  Testing `--ipc=container:CONTAINERID` mode:
   709  
   710  Start a container with a program to create a shared memory segment:
   711  ```
   712   $ docker run -it shm bash
   713   $ sudo shm/shm_server &
   714   $ sudo ipcs -m
   715  
   716   ------ Shared Memory Segments --------
   717   key        shmid      owner      perms      bytes      nattch     status      
   718   0x0000162e 0          root       666        27         1                       
   719  ```
   720  Create a 2nd container correctly shows no shared memory segment from 1st container:
   721  ```
   722   $ docker run shm ipcs -m
   723  
   724   ------ Shared Memory Segments --------
   725   key        shmid      owner      perms      bytes      nattch     status      
   726  ```
   727  
   728  Create a 3rd container using the new --ipc=container:CONTAINERID option, now it shows the shared memory segment from the first:
   729  
   730  ```
   731   $ docker run -it --ipc=container:ed735b2264ac shm ipcs -m
   732   $ sudo ipcs -m
   733  
   734   ------ Shared Memory Segments --------
   735   key        shmid      owner      perms      bytes      nattch     status      
   736   0x0000162e 0          root       666        27         1
   737  ```
   738  
   739  ## Linking Containers
   740  
   741  The link feature allows multiple containers to communicate with each other. For
   742  example, a container whose Dockerfile has exposed port 80 can be run and named
   743  as follows:
   744  
   745      # docker run --name=link-test -d -i -t fedora/httpd
   746  
   747  A second container, in this case called linker, can communicate with the httpd
   748  container, named link-test, by running with the **--link=<name>:<alias>**
   749  
   750      # docker run -t -i --link=link-test:lt --name=linker fedora /bin/bash
   751  
   752  Now the container linker is linked to container link-test with the alias lt.
   753  Running the **env** command in the linker container shows environment variables
   754   with the LT (alias) context (**LT_**)
   755  
   756      # env
   757      HOSTNAME=668231cb0978
   758      TERM=xterm
   759      LT_PORT_80_TCP=tcp://172.17.0.3:80
   760      LT_PORT_80_TCP_PORT=80
   761      LT_PORT_80_TCP_PROTO=tcp
   762      LT_PORT=tcp://172.17.0.3:80
   763      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
   764      PWD=/
   765      LT_NAME=/linker/lt
   766      SHLVL=1
   767      HOME=/
   768      LT_PORT_80_TCP_ADDR=172.17.0.3
   769      _=/usr/bin/env
   770  
   771  When linking two containers Docker will use the exposed ports of the container
   772  to create a secure tunnel for the parent to access.
   773  
   774  If a container is connected to the default bridge network and `linked`
   775  with other containers, then the container's `/etc/hosts` file is updated
   776  with the linked container's name.
   777  
   778  > **Note** Since Docker may live update the container’s `/etc/hosts` file, there
   779  may be situations when processes inside the container can end up reading an
   780  empty or incomplete `/etc/hosts` file. In most cases, retrying the read again
   781  should fix the problem.
   782  
   783  
   784  ## Mapping Ports for External Usage
   785  
   786  The exposed port of an application can be mapped to a host port using the **-p**
   787  flag. For example, a httpd port 80 can be mapped to the host port 8080 using the
   788  following:
   789  
   790      # docker run -p 8080:80 -d -i -t fedora/httpd
   791  
   792  ## Creating and Mounting a Data Volume Container
   793  
   794  Many applications require the sharing of persistent data across several
   795  containers. Docker allows you to create a Data Volume Container that other
   796  containers can mount from. For example, create a named container that contains
   797  directories /var/volume1 and /tmp/volume2. The image will need to contain these
   798  directories so a couple of RUN mkdir instructions might be required for you
   799  fedora-data image:
   800  
   801      # docker run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true
   802      # docker run --volumes-from=data --name=fedora-container1 -i -t fedora bash
   803  
   804  Multiple --volumes-from parameters will bring together multiple data volumes from
   805  multiple containers. And it's possible to mount the volumes that came from the
   806  DATA container in yet another container via the fedora-container1 intermediary
   807  container, allowing to abstract the actual data source from users of that data:
   808  
   809      # docker run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash
   810  
   811  ## Mounting External Volumes
   812  
   813  To mount a host directory as a container volume, specify the absolute path to
   814  the directory and the absolute path for the container directory separated by a
   815  colon:
   816  
   817      # docker run -v /var/db:/data1 -i -t fedora bash
   818  
   819  When using SELinux, be aware that the host has no knowledge of container SELinux
   820  policy. Therefore, in the above example, if SELinux policy is enforced, the
   821  `/var/db` directory is not writable to the container. A "Permission Denied"
   822  message will occur and an avc: message in the host's syslog.
   823  
   824  
   825  To work around this, at time of writing this man page, the following command
   826  needs to be run in order for the proper SELinux policy type label to be attached
   827  to the host directory:
   828  
   829      # chcon -Rt svirt_sandbox_file_t /var/db
   830  
   831  
   832  Now, writing to the /data1 volume in the container will be allowed and the
   833  changes will also be reflected on the host in /var/db.
   834  
   835  ## Using alternative security labeling
   836  
   837  You can override the default labeling scheme for each container by specifying
   838  the `--security-opt` flag. For example, you can specify the MCS/MLS level, a
   839  requirement for MLS systems. Specifying the level in the following command
   840  allows you to share the same content between containers.
   841  
   842      # docker run --security-opt label:level:s0:c100,c200 -i -t fedora bash
   843  
   844  An MLS example might be:
   845  
   846      # docker run --security-opt label:level:TopSecret -i -t rhel7 bash
   847  
   848  To disable the security labeling for this container versus running with the
   849  `--permissive` flag, use the following command:
   850  
   851      # docker run --security-opt label:disable -i -t fedora bash
   852  
   853  If you want a tighter security policy on the processes within a container,
   854  you can specify an alternate type for the container. You could run a container
   855  that is only allowed to listen on Apache ports by executing the following
   856  command:
   857  
   858      # docker run --security-opt label:type:svirt_apache_t -i -t centos bash
   859  
   860  Note:
   861  
   862  You would have to write policy defining a `svirt_apache_t` type.
   863  
   864  ## Setting device weight
   865  
   866  If you want to set `/dev/sda` device weight to `200`, you can specify the device
   867  weight by `--blkio-weight-device` flag. Use the following command:
   868  
   869     # docker run -it --blkio-weight-device "/dev/sda:200" ubuntu
   870  
   871  ## Specify isolation technology for container (--isolation)
   872  
   873  This option is useful in situations where you are running Docker containers on
   874  Microsoft Windows. The `--isolation <value>` option sets a container's isolation
   875  technology. On Linux, the only supported is the `default` option which uses
   876  Linux namespaces. These two commands are equivalent on Linux:
   877  
   878  ```
   879  $ docker run -d busybox top
   880  $ docker run -d --isolation default busybox top
   881  ```
   882  
   883  On Microsoft Windows, can take any of these values:
   884  
   885  * `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.
   886  * `process`: Namespace isolation only.
   887  * `hyperv`: Hyper-V hypervisor partition-based isolation.
   888  
   889  In practice, when running on Microsoft Windows without a `daemon` option set,  these two commands are equivalent:
   890  
   891  ```
   892  $ docker run -d --isolation default busybox top
   893  $ docker run -d --isolation process busybox top
   894  ```
   895  
   896  If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, any of these commands also result in `hyperv` isolation:
   897  
   898  ```
   899  $ docker run -d --isolation default busybox top
   900  $ docker run -d --isolation hyperv busybox top
   901  ```
   902  
   903  # HISTORY
   904  April 2014, Originally compiled by William Henry (whenry at redhat dot com)
   905  based on docker.com source material and internal work.
   906  June 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>
   907  July 2014, updated by Sven Dowideit <SvenDowideit@home.org.au>
   908  November 2015, updated by Sally O'Malley <somalley@redhat.com>