github.com/kim0/docker@v0.6.2-0.20161130212042-4addda3f07e7/docs/reference/run.md (about)

     1  ---
     2  title: "Docker run reference"
     3  description: "Configure containers at runtime"
     4  keywords: ["docker, run, configure,  runtime"]
     5  ---
     6  
     7  <!-- This file is maintained within the docker/docker Github
     8       repository at https://github.com/docker/docker/. Make all
     9       pull requests against that repo. If you see this file in
    10       another repository, consider it read-only there, as it will
    11       periodically be overwritten by the definitive file. Pull
    12       requests which include edits to this file in other repositories
    13       will be rejected.
    14  -->
    15  
    16  # Docker run reference
    17  
    18  Docker runs processes in isolated containers. A container is a process
    19  which runs on a host. The host may be local or remote. When an operator
    20  executes `docker run`, the container process that runs is isolated in
    21  that it has its own file system, its own networking, and its own
    22  isolated process tree separate from the host.
    23  
    24  This page details how to use the `docker run` command to define the
    25  container's resources at runtime.
    26  
    27  ## General form
    28  
    29  The basic `docker run` command takes this form:
    30  
    31      $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
    32  
    33  The `docker run` command must specify an [*IMAGE*](glossary.md#image)
    34  to derive the container from. An image developer can define image
    35  defaults related to:
    36  
    37   * detached or foreground running
    38   * container identification
    39   * network settings
    40   * runtime constraints on CPU and memory
    41  
    42  With the `docker run [OPTIONS]` an operator can add to or override the
    43  image defaults set by a developer. And, additionally, operators can
    44  override nearly all the defaults set by the Docker runtime itself. The
    45  operator's ability to override image and Docker runtime defaults is why
    46  [*run*](commandline/run.md) has more options than any
    47  other `docker` command.
    48  
    49  To learn how to interpret the types of `[OPTIONS]`, see [*Option
    50  types*](commandline/cli.md#option-types).
    51  
    52  > **Note**: Depending on your Docker system configuration, you may be
    53  > required to preface the `docker run` command with `sudo`. To avoid
    54  > having to use `sudo` with the `docker` command, your system
    55  > administrator can create a Unix group called `docker` and add users to
    56  > it. For more information about this configuration, refer to the Docker
    57  > installation documentation for your operating system.
    58  
    59  
    60  ## Operator exclusive options
    61  
    62  Only the operator (the person executing `docker run`) can set the
    63  following options.
    64  
    65   - [Detached vs foreground](#detached-vs-foreground)
    66       - [Detached (-d)](#detached-d)
    67       - [Foreground](#foreground)
    68   - [Container identification](#container-identification)
    69       - [Name (--name)](#name-name)
    70       - [PID equivalent](#pid-equivalent)
    71   - [IPC settings (--ipc)](#ipc-settings-ipc)
    72   - [Network settings](#network-settings)
    73   - [Restart policies (--restart)](#restart-policies-restart)
    74   - [Clean up (--rm)](#clean-up-rm)
    75   - [Runtime constraints on resources](#runtime-constraints-on-resources)
    76   - [Runtime privilege and Linux capabilities](#runtime-privilege-and-linux-capabilities)
    77  
    78  ## Detached vs foreground
    79  
    80  When starting a Docker container, you must first decide if you want to
    81  run the container in the background in a "detached" mode or in the
    82  default foreground mode:
    83  
    84      -d=false: Detached mode: Run container in the background, print new container id
    85  
    86  ### Detached (-d)
    87  
    88  To start a container in detached mode, you use `-d=true` or just `-d` option. By
    89  design, containers started in detached mode exit when the root process used to
    90  run the container exits. A container in detached mode cannot be automatically
    91  removed when it stops, this means you cannot use the `--rm` option with `-d` option.
    92  
    93  Do not pass a `service x start` command to a detached container. For example, this
    94  command attempts to start the `nginx` service.
    95  
    96      $ docker run -d -p 80:80 my_image service nginx start
    97  
    98  This succeeds in starting the `nginx` service inside the container. However, it
    99  fails the detached container paradigm in that, the root process (`service nginx
   100  start`) returns and the detached container stops as designed. As a result, the
   101  `nginx` service is started but could not be used. Instead, to start a process
   102  such as the `nginx` web server do the following:
   103  
   104      $ docker run -d -p 80:80 my_image nginx -g 'daemon off;'
   105  
   106  To do input/output with a detached container use network connections or shared
   107  volumes. These are required because the container is no longer listening to the
   108  command line where `docker run` was run.
   109  
   110  To reattach to a detached container, use `docker`
   111  [*attach*](commandline/attach.md) command.
   112  
   113  ### Foreground
   114  
   115  In foreground mode (the default when `-d` is not specified), `docker
   116  run` can start the process in the container and attach the console to
   117  the process's standard input, output, and standard error. It can even
   118  pretend to be a TTY (this is what most command line executables expect)
   119  and pass along signals. All of that is configurable:
   120  
   121      -a=[]           : Attach to `STDIN`, `STDOUT` and/or `STDERR`
   122      -t              : Allocate a pseudo-tty
   123      --sig-proxy=true: Proxy all received signals to the process (non-TTY mode only)
   124      -i              : Keep STDIN open even if not attached
   125  
   126  If you do not specify `-a` then Docker will [attach all standard
   127  streams]( https://github.com/docker/docker/blob/75a7f4d90cde0295bcfb7213004abce8d4779b75/commands.go#L1797).
   128  You can specify to which of the three standard streams (`STDIN`, `STDOUT`,
   129  `STDERR`) you'd like to connect instead, as in:
   130  
   131      $ docker run -a stdin -a stdout -i -t ubuntu /bin/bash
   132  
   133  For interactive processes (like a shell), you must use `-i -t` together in
   134  order to allocate a tty for the container process. `-i -t` is often written `-it`
   135  as you'll see in later examples.  Specifying `-t` is forbidden when the client
   136  standard output is redirected or piped, such as in:
   137  
   138      $ echo test | docker run -i busybox cat
   139  
   140  >**Note**: A process running as PID 1 inside a container is treated
   141  >specially by Linux: it ignores any signal with the default action.
   142  >So, the process will not terminate on `SIGINT` or `SIGTERM` unless it is
   143  >coded to do so.
   144  
   145  ## Container identification
   146  
   147  ### Name (--name)
   148  
   149  The operator can identify a container in three ways:
   150  
   151  | Identifier type       | Example value                                                      |
   152  | --------------------- | ------------------------------------------------------------------ |
   153  | UUID long identifier  | "f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778" |
   154  | UUID short identifier | "f78375b1c487"                                                     |
   155  | Name                  | "evil_ptolemy"                                                     |
   156  
   157  The UUID identifiers come from the Docker daemon. If you do not assign a
   158  container name with the `--name` option, then the daemon generates a random
   159  string name for you. Defining a `name` can be a handy way to add meaning to a
   160  container. If you specify a `name`, you can use it  when referencing the
   161  container within a Docker network. This works for both background and foreground
   162  Docker containers.
   163  
   164  > **Note**: Containers on the default bridge network must be linked to
   165  > communicate by name.
   166  
   167  ### PID equivalent
   168  
   169  Finally, to help with automation, you can have Docker write the
   170  container ID out to a file of your choosing. This is similar to how some
   171  programs might write out their process ID to a file (you've seen them as
   172  PID files):
   173  
   174      --cidfile="": Write the container ID to the file
   175  
   176  ### Image[:tag]
   177  
   178  While not strictly a means of identifying a container, you can specify a version of an
   179  image you'd like to run the container with by adding `image[:tag]` to the command. For
   180  example, `docker run ubuntu:14.04`.
   181  
   182  ### Image[@digest]
   183  
   184  Images using the v2 or later image format have a content-addressable identifier
   185  called a digest. As long as the input used to generate the image is unchanged,
   186  the digest value is predictable and referenceable.
   187  
   188  The following example runs a container from the `alpine` image with the
   189  `sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0` digest:
   190  
   191      $ docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date
   192  
   193  ## PID settings (--pid)
   194  
   195      --pid=""  : Set the PID (Process) Namespace mode for the container,
   196                   'container:<name|id>': joins another container's PID namespace
   197                   'host': use the host's PID namespace inside the container
   198  
   199  By default, all containers have the PID namespace enabled.
   200  
   201  PID namespace provides separation of processes. The PID Namespace removes the
   202  view of the system processes, and allows process ids to be reused including
   203  pid 1.
   204  
   205  In certain cases you want your container to share the host's process namespace,
   206  basically allowing processes within the container to see all of the processes
   207  on the system.  For example, you could build a container with debugging tools
   208  like `strace` or `gdb`, but want to use these tools when debugging processes
   209  within the container.
   210  
   211  ### Example: run htop inside a container
   212  
   213  Create this Dockerfile:
   214  
   215  ```
   216  FROM alpine:latest
   217  RUN apk add --update htop && rm -rf /var/cache/apk/*
   218  CMD ["htop"]
   219  ```
   220  
   221  Build the Dockerfile and tag the image as `myhtop`:
   222  
   223  ```bash
   224  $ docker build -t myhtop .
   225  ```
   226  
   227  Use the following command to run `htop` inside a container:
   228  
   229  ```
   230  $ docker run -it --rm --pid=host myhtop
   231  ```
   232  
   233  Joining another container's pid namespace can be used for debugging that container.
   234  
   235  ### Example
   236  
   237  Start a container running a redis server:
   238  
   239  ```bash
   240  $ docker run --name my-redis -d redis
   241  ```
   242  
   243  Debug the redis container by running another container that has strace in it:
   244  
   245  ```bash
   246  $ docker run -it --pid=container:my-redis my_strace_docker_image bash
   247  $ strace -p 1
   248  ```
   249  
   250  ## UTS settings (--uts)
   251  
   252      --uts=""  : Set the UTS namespace mode for the container,
   253             'host': use the host's UTS namespace inside the container
   254  
   255  The UTS namespace is for setting the hostname and the domain that is visible
   256  to running processes in that namespace.  By default, all containers, including
   257  those with `--network=host`, have their own UTS namespace.  The `host` setting will
   258  result in the container using the same UTS namespace as the host.  Note that
   259  `--hostname` is invalid in `host` UTS mode.
   260  
   261  You may wish to share the UTS namespace with the host if you would like the
   262  hostname of the container to change as the hostname of the host changes.  A
   263  more advanced use case would be changing the host's hostname from a container.
   264  
   265  ## IPC settings (--ipc)
   266  
   267      --ipc=""  : Set the IPC mode for the container,
   268                   'container:<name|id>': reuses another container's IPC namespace
   269                   'host': use the host's IPC namespace inside the container
   270  
   271  By default, all containers have the IPC namespace enabled.
   272  
   273  IPC (POSIX/SysV IPC) namespace provides separation of named shared memory
   274  segments, semaphores and message queues.
   275  
   276  Shared memory segments are used to accelerate inter-process communication at
   277  memory speed, rather than through pipes or through the network stack. Shared
   278  memory is commonly used by databases and custom-built (typically C/OpenMPI,
   279  C++/using boost libraries) high performance applications for scientific
   280  computing and financial services industries. If these types of applications
   281  are broken into multiple containers, you might need to share the IPC mechanisms
   282  of the containers.
   283  
   284  ## Network settings
   285  
   286      --dns=[]           : Set custom dns servers for the container
   287      --network="bridge" : Connect a container to a network
   288                            'bridge': create a network stack on the default Docker bridge
   289                            'none': no networking
   290                            'container:<name|id>': reuse another container's network stack
   291                            'host': use the Docker host network stack
   292                            '<network-name>|<network-id>': connect to a user-defined network
   293      --network-alias=[] : Add network-scoped alias for the container
   294      --add-host=""      : Add a line to /etc/hosts (host:IP)
   295      --mac-address=""   : Sets the container's Ethernet device's MAC address
   296      --ip=""            : Sets the container's Ethernet device's IPv4 address
   297      --ip6=""           : Sets the container's Ethernet device's IPv6 address
   298      --link-local-ip=[] : Sets one or more container's Ethernet device's link local IPv4/IPv6 addresses
   299  
   300  By default, all containers have networking enabled and they can make any
   301  outgoing connections. The operator can completely disable networking
   302  with `docker run --network none` which disables all incoming and outgoing
   303  networking. In cases like this, you would perform I/O through files or
   304  `STDIN` and `STDOUT` only.
   305  
   306  Publishing ports and linking to other containers only works with the default (bridge). The linking feature is a legacy feature. You should always prefer using Docker network drivers over linking.
   307  
   308  Your container will use the same DNS servers as the host by default, but
   309  you can override this with `--dns`.
   310  
   311  By default, the MAC address is generated using the IP address allocated to the
   312  container. You can set the container's MAC address explicitly by providing a
   313  MAC address via the `--mac-address` parameter (format:`12:34:56:78:9a:bc`).Be
   314  aware that Docker does not check if manually specified MAC addresses are unique.
   315  
   316  Supported networks :
   317  
   318  <table>
   319    <thead>
   320      <tr>
   321        <th class="no-wrap">Network</th>
   322        <th>Description</th>
   323      </tr>
   324    </thead>
   325    <tbody>
   326      <tr>
   327        <td class="no-wrap"><strong>none</strong></td>
   328        <td>
   329          No networking in the container.
   330        </td>
   331      </tr>
   332      <tr>
   333        <td class="no-wrap"><strong>bridge</strong> (default)</td>
   334        <td>
   335          Connect the container to the bridge via veth interfaces.
   336        </td>
   337      </tr>
   338      <tr>
   339        <td class="no-wrap"><strong>host</strong></td>
   340        <td>
   341          Use the host's network stack inside the container.
   342        </td>
   343      </tr>
   344      <tr>
   345        <td class="no-wrap"><strong>container</strong>:&lt;name|id&gt;</td>
   346        <td>
   347          Use the network stack of another container, specified via
   348          its *name* or *id*.
   349        </td>
   350      </tr>
   351      <tr>
   352        <td class="no-wrap"><strong>NETWORK</strong></td>
   353        <td>
   354          Connects the container to a user created network (using `docker network create` command)
   355        </td>
   356      </tr>
   357    </tbody>
   358  </table>
   359  
   360  #### Network: none
   361  
   362  With the network is `none` a container will not have
   363  access to any external routes.  The container will still have a
   364  `loopback` interface enabled in the container but it does not have any
   365  routes to external traffic.
   366  
   367  #### Network: bridge
   368  
   369  With the network set to `bridge` a container will use docker's
   370  default networking setup.  A bridge is setup on the host, commonly named
   371  `docker0`, and a pair of `veth` interfaces will be created for the
   372  container.  One side of the `veth` pair will remain on the host attached
   373  to the bridge while the other side of the pair will be placed inside the
   374  container's namespaces in addition to the `loopback` interface.  An IP
   375  address will be allocated for containers on the bridge's network and
   376  traffic will be routed though this bridge to the container.
   377  
   378  Containers can communicate via their IP addresses by default. To communicate by
   379  name, they must be linked.
   380  
   381  #### Network: host
   382  
   383  With the network set to `host` a container will share the host's
   384  network stack and all interfaces from the host will be available to the
   385  container.  The container's hostname will match the hostname on the host
   386  system. Note that `--mac-address` is invalid in `host` netmode. Even in `host`
   387  network mode a container has its own UTS namespace by default. As such
   388  `--hostname` is allowed in `host` network mode and will only change the
   389  hostname inside the container.
   390  Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and
   391  `--dns-opt` options can be used in `host` network mode. These options update
   392  `/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to
   393  `/etc/hosts` and `/etc/resolv.conf` on the host.
   394  
   395  Compared to the default `bridge` mode, the `host` mode gives *significantly*
   396  better networking performance since it uses the host's native networking stack
   397  whereas the bridge has to go through one level of virtualization through the
   398  docker daemon. It is recommended to run containers in this mode when their
   399  networking performance is critical, for example, a production Load Balancer
   400  or a High Performance Web Server.
   401  
   402  > **Note**: `--network="host"` gives the container full access to local system
   403  > services such as D-bus and is therefore considered insecure.
   404  
   405  #### Network: container
   406  
   407  With the network set to `container` a container will share the
   408  network stack of another container.  The other container's name must be
   409  provided in the format of `--network container:<name|id>`. Note that `--add-host`
   410  `--hostname` `--dns` `--dns-search` `--dns-opt` and `--mac-address` are
   411  invalid in `container` netmode, and `--publish` `--publish-all` `--expose` are
   412  also invalid in `container` netmode.
   413  
   414  Example running a Redis container with Redis binding to `localhost` then
   415  running the `redis-cli` command and connecting to the Redis server over the
   416  `localhost` interface.
   417  
   418      $ docker run -d --name redis example/redis --bind 127.0.0.1
   419      $ # use the redis container's network stack to access localhost
   420      $ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1
   421  
   422  #### User-defined network
   423  
   424  You can create a network using a Docker network driver or an external network
   425  driver plugin. You can connect multiple containers to the same network. Once
   426  connected to a user-defined network, the containers can communicate easily using
   427  only another container's IP address or name.
   428  
   429  For `overlay` networks or custom plugins that support multi-host connectivity,
   430  containers connected to the same multi-host network but launched from different
   431  Engines can also communicate in this way.
   432  
   433  The following example creates a network using the built-in `bridge` network
   434  driver and running a container in the created network
   435  
   436  ```
   437  $ docker network create -d bridge my-net
   438  $ docker run --network=my-net -itd --name=container3 busybox
   439  ```
   440  
   441  ### Managing /etc/hosts
   442  
   443  Your container will have lines in `/etc/hosts` which define the hostname of the
   444  container itself as well as `localhost` and a few other common things. The
   445  `--add-host` flag can be used to add additional lines to `/etc/hosts`.
   446  
   447      $ docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
   448      172.17.0.22     09d03f76bf2c
   449      fe00::0         ip6-localnet
   450      ff00::0         ip6-mcastprefix
   451      ff02::1         ip6-allnodes
   452      ff02::2         ip6-allrouters
   453      127.0.0.1       localhost
   454      ::1	            localhost ip6-localhost ip6-loopback
   455      86.75.30.9      db-static
   456  
   457  If a container is connected to the default bridge network and `linked`
   458  with other containers, then the container's `/etc/hosts` file is updated
   459  with the linked container's name.
   460  
   461  If the container is connected to user-defined network, the container's
   462  `/etc/hosts` file is updated with names of all other containers in that
   463  user-defined network.
   464  
   465  > **Note** Since Docker may live update the container’s `/etc/hosts` file, there
   466  may be situations when processes inside the container can end up reading an
   467  empty or incomplete `/etc/hosts` file. In most cases, retrying the read again
   468  should fix the problem.
   469  
   470  ## Restart policies (--restart)
   471  
   472  Using the `--restart` flag on Docker run you can specify a restart policy for
   473  how a container should or should not be restarted on exit.
   474  
   475  When a restart policy is active on a container, it will be shown as either `Up`
   476  or `Restarting` in [`docker ps`](commandline/ps.md). It can also be
   477  useful to use [`docker events`](commandline/events.md) to see the
   478  restart policy in effect.
   479  
   480  Docker supports the following restart policies:
   481  
   482  <table>
   483    <thead>
   484      <tr>
   485        <th>Policy</th>
   486        <th>Result</th>
   487      </tr>
   488    </thead>
   489    <tbody>
   490      <tr>
   491        <td><strong>no</strong></td>
   492        <td>
   493          Do not automatically restart the container when it exits. This is the
   494          default.
   495        </td>
   496      </tr>
   497      <tr>
   498        <td>
   499          <span style="white-space: nowrap">
   500            <strong>on-failure</strong>[:max-retries]
   501          </span>
   502        </td>
   503        <td>
   504          Restart only if the container exits with a non-zero exit status.
   505          Optionally, limit the number of restart retries the Docker
   506          daemon attempts.
   507        </td>
   508      </tr>
   509      <tr>
   510        <td><strong>always</strong></td>
   511        <td>
   512          Always restart the container regardless of the exit status.
   513          When you specify always, the Docker daemon will try to restart
   514          the container indefinitely. The container will also always start
   515          on daemon startup, regardless of the current state of the container.
   516        </td>
   517      </tr>
   518      <tr>
   519        <td><strong>unless-stopped</strong></td>
   520        <td>
   521          Always restart the container regardless of the exit status, but
   522          do not start it on daemon startup if the container has been put
   523          to a stopped state before.
   524        </td>
   525      </tr>
   526    </tbody>
   527  </table>
   528  
   529  An ever increasing delay (double the previous delay, starting at 100
   530  milliseconds) is added before each restart to prevent flooding the server.
   531  This means the daemon will wait for 100 ms, then 200 ms, 400, 800, 1600,
   532  and so on until either the `on-failure` limit is hit, or when you `docker stop`
   533  or `docker rm -f` the container.
   534  
   535  If a container is successfully restarted (the container is started and runs
   536  for at least 10 seconds), the delay is reset to its default value of 100 ms.
   537  
   538  You can specify the maximum amount of times Docker will try to restart the
   539  container when using the **on-failure** policy.  The default is that Docker
   540  will try forever to restart the container. The number of (attempted) restarts
   541  for a container can be obtained via [`docker inspect`](commandline/inspect.md). For example, to get the number of restarts
   542  for container "my-container";
   543  
   544      {% raw %}
   545      $ docker inspect -f "{{ .RestartCount }}" my-container
   546      # 2
   547      {% endraw %}
   548  
   549  Or, to get the last time the container was (re)started;
   550  
   551      {% raw %}
   552      $ docker inspect -f "{{ .State.StartedAt }}" my-container
   553      # 2015-03-04T23:47:07.691840179Z
   554      {% endraw %}
   555  
   556  
   557  Combining `--restart` (restart policy) with the `--rm` (clean up) flag results
   558  in an error. On container restart, attached clients are disconnected. See the
   559  examples on using the [`--rm` (clean up)](#clean-up-rm) flag later in this page.
   560  
   561  ### Examples
   562  
   563      $ docker run --restart=always redis
   564  
   565  This will run the `redis` container with a restart policy of **always**
   566  so that if the container exits, Docker will restart it.
   567  
   568      $ docker run --restart=on-failure:10 redis
   569  
   570  This will run the `redis` container with a restart policy of **on-failure**
   571  and a maximum restart count of 10.  If the `redis` container exits with a
   572  non-zero exit status more than 10 times in a row Docker will abort trying to
   573  restart the container. Providing a maximum restart limit is only valid for the
   574  **on-failure** policy.
   575  
   576  ## Exit Status
   577  
   578  The exit code from `docker run` gives information about why the container
   579  failed to run or why it exited.  When `docker run` exits with a non-zero code,
   580  the exit codes follow the `chroot` standard, see below:
   581  
   582  **_125_** if the error is with Docker daemon **_itself_**
   583  
   584      $ docker run --foo busybox; echo $?
   585      # flag provided but not defined: --foo
   586        See 'docker run --help'.
   587        125
   588  
   589  **_126_** if the **_contained command_** cannot be invoked
   590  
   591      $ docker run busybox /etc; echo $?
   592      # docker: Error response from daemon: Container command '/etc' could not be invoked.
   593        126
   594  
   595  **_127_** if the **_contained command_** cannot be found
   596  
   597      $ docker run busybox foo; echo $?
   598      # docker: Error response from daemon: Container command 'foo' not found or does not exist.
   599        127
   600  
   601  **_Exit code_** of **_contained command_** otherwise
   602  
   603      $ docker run busybox /bin/sh -c 'exit 3'; echo $?
   604      # 3
   605  
   606  ## Clean up (--rm)
   607  
   608  By default a container's file system persists even after the container
   609  exits. This makes debugging a lot easier (since you can inspect the
   610  final state) and you retain all your data by default. But if you are
   611  running short-term **foreground** processes, these container file
   612  systems can really pile up. If instead you'd like Docker to
   613  **automatically clean up the container and remove the file system when
   614  the container exits**, you can add the `--rm` flag:
   615  
   616      --rm=false: Automatically remove the container when it exits (incompatible with -d)
   617  
   618  > **Note**: When you set the `--rm` flag, Docker also removes the volumes
   619  associated with the container when the container is removed. This is similar
   620  to running `docker rm -v my-container`. Only volumes that are specified without a
   621  name are removed. For example, with
   622  `docker run --rm -v /foo -v awesome:/bar busybox top`, the volume for `/foo` will be removed,
   623  but the volume for `/bar` will not. Volumes inherited via `--volumes-from` will be removed
   624  with the same logic -- if the original volume was specified with a name it will **not** be removed.
   625  
   626  ## Security configuration
   627      --security-opt="label=user:USER"   : Set the label user for the container
   628      --security-opt="label=role:ROLE"   : Set the label role for the container
   629      --security-opt="label=type:TYPE"   : Set the label type for the container
   630      --security-opt="label=level:LEVEL" : Set the label level for the container
   631      --security-opt="label=disable"     : Turn off label confinement for the container
   632      --security-opt="apparmor=PROFILE"  : Set the apparmor profile to be applied to the container
   633      --security-opt="no-new-privileges" : Disable container processes from gaining new privileges
   634      --security-opt="seccomp=unconfined": Turn off seccomp confinement for the container
   635      --security-opt="seccomp=profile.json: White listed syscalls seccomp Json file to be used as a seccomp filter
   636  
   637  
   638  You can override the default labeling scheme for each container by specifying
   639  the `--security-opt` flag. Specifying the level in the following command
   640  allows you to share the same content between containers.
   641  
   642      $ docker run --security-opt label=level:s0:c100,c200 -it fedora bash
   643  
   644  > **Note**: Automatic translation of MLS labels is not currently supported.
   645  
   646  To disable the security labeling for this container versus running with the
   647  `--privileged` flag, use the following command:
   648  
   649      $ docker run --security-opt label=disable -it fedora bash
   650  
   651  If you want a tighter security policy on the processes within a container,
   652  you can specify an alternate type for the container. You could run a container
   653  that is only allowed to listen on Apache ports by executing the following
   654  command:
   655  
   656      $ docker run --security-opt label=type:svirt_apache_t -it centos bash
   657  
   658  > **Note**: You would have to write policy defining a `svirt_apache_t` type.
   659  
   660  If you want to prevent your container processes from gaining additional
   661  privileges, you can execute the following command:
   662  
   663      $ docker run --security-opt no-new-privileges -it centos bash
   664  
   665  This means that commands that raise privileges such as `su` or `sudo` will no longer work.
   666  It also causes any seccomp filters to be applied later, after privileges have been dropped
   667  which may mean you can have a more restrictive set of filters.
   668  For more details, see the [kernel documentation](https://www.kernel.org/doc/Documentation/prctl/no_new_privs.txt).
   669  
   670  ## Specifying custom cgroups
   671  
   672  Using the `--cgroup-parent` flag, you can pass a specific cgroup to run a
   673  container in. This allows you to create and manage cgroups on their own. You can
   674  define custom resources for those cgroups and put containers under a common
   675  parent group.
   676  
   677  ## Runtime constraints on resources
   678  
   679  The operator can also adjust the performance parameters of the
   680  container:
   681  
   682  | Option                     |  Description                                                                                                                                    |
   683  | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
   684  | `-m`, `--memory=""`        | Memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M.               |
   685  | `--memory-swap=""`         | Total memory limit (memory + swap, format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`.         |
   686  | `--memory-reservation=""`  | Memory soft limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`.                         |
   687  | `--kernel-memory=""`       | Kernel memory limit (format: `<number>[<unit>]`). Number is a positive integer. Unit can be one of `b`, `k`, `m`, or `g`. Minimum is 4M.        |
   688  | `-c`, `--cpu-shares=0`     | CPU shares (relative weight)                                                                                                                    |
   689  | `--cpu-period=0`           | Limit the CPU CFS (Completely Fair Scheduler) period                                                                                            |
   690  | `--cpuset-cpus=""`         | CPUs in which to allow execution (0-3, 0,1)                                                                                                     |
   691  | `--cpuset-mems=""`         | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.                                                     |
   692  | `--cpu-quota=0`            | Limit the CPU CFS (Completely Fair Scheduler) quota                                                                                             |
   693  | `--cpu-rt-period=0`        | Limit the CPU real-time period. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits.    |
   694  | `--cpu-rt-runtime=0`       | Limit the CPU real-time runtime. In microseconds. Requires parent cgroups be set and cannot be higher than parent. Also check rtprio ulimits.   |
   695  | `--blkio-weight=0`         | Block IO weight (relative weight) accepts a weight value between 10 and 1000.                                                                   |
   696  | `--blkio-weight-device=""` | Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`)                                                                          |
   697  | `--device-read-bps=""`     | Limit read rate from a device (format: `<device-path>:<number>[<unit>]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`. |
   698  | `--device-write-bps=""`    | Limit write rate to a device (format: `<device-path>:<number>[<unit>]`). Number is a positive integer. Unit can be one of `kb`, `mb`, or `gb`.  |
   699  | `--device-read-iops="" `   | Limit read rate (IO per second) from a device (format: `<device-path>:<number>`). Number is a positive integer.                                 |
   700  | `--device-write-iops="" `  | Limit write rate (IO per second) to a device (format: `<device-path>:<number>`). Number is a positive integer.                                  |
   701  | `--oom-kill-disable=false` | Whether to disable OOM Killer for the container or not.                                                                                         |
   702  | `--oom-score-adj=0`        | Tune container's OOM preferences (-1000 to 1000)                                                                                                |
   703  | `--memory-swappiness=""`   | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.                                                            |
   704  | `--shm-size=""`            | Size of `/dev/shm`. The format is `<number><unit>`. `number` must be greater than `0`. Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. |
   705  
   706  ### User memory constraints
   707  
   708  We have four ways to set user memory usage:
   709  
   710  <table>
   711    <thead>
   712      <tr>
   713        <th>Option</th>
   714        <th>Result</th>
   715      </tr>
   716    </thead>
   717    <tbody>
   718      <tr>
   719        <td class="no-wrap">
   720            <strong>memory=inf, memory-swap=inf</strong> (default)
   721        </td>
   722        <td>
   723          There is no memory limit for the container. The container can use
   724          as much memory as needed.
   725        </td>
   726      </tr>
   727      <tr>
   728        <td class="no-wrap"><strong>memory=L&lt;inf, memory-swap=inf</strong></td>
   729        <td>
   730          (specify memory and set memory-swap as <code>-1</code>) The container is
   731          not allowed to use more than L bytes of memory, but can use as much swap
   732          as is needed (if the host supports swap memory).
   733        </td>
   734      </tr>
   735      <tr>
   736        <td class="no-wrap"><strong>memory=L&lt;inf, memory-swap=2*L</strong></td>
   737        <td>
   738          (specify memory without memory-swap) The container is not allowed to
   739          use more than L bytes of memory, swap *plus* memory usage is double
   740          of that.
   741        </td>
   742      </tr>
   743      <tr>
   744        <td class="no-wrap">
   745            <strong>memory=L&lt;inf, memory-swap=S&lt;inf, L&lt;=S</strong>
   746        </td>
   747        <td>
   748          (specify both memory and memory-swap) The container is not allowed to
   749          use more than L bytes of memory, swap *plus* memory usage is limited
   750          by S.
   751        </td>
   752      </tr>
   753    </tbody>
   754  </table>
   755  
   756  Examples:
   757  
   758      $ docker run -it ubuntu:14.04 /bin/bash
   759  
   760  We set nothing about memory, this means the processes in the container can use
   761  as much memory and swap memory as they need.
   762  
   763      $ docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash
   764  
   765  We set memory limit and disabled swap memory limit, this means the processes in
   766  the container can use 300M memory and as much swap memory as they need (if the
   767  host supports swap memory).
   768  
   769      $ docker run -it -m 300M ubuntu:14.04 /bin/bash
   770  
   771  We set memory limit only, this means the processes in the container can use
   772  300M memory and 300M swap memory, by default, the total virtual memory size
   773  (--memory-swap) will be set as double of memory, in this case, memory + swap
   774  would be 2*300M, so processes can use 300M swap memory as well.
   775  
   776      $ docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash
   777  
   778  We set both memory and swap memory, so the processes in the container can use
   779  300M memory and 700M swap memory.
   780  
   781  Memory reservation is a kind of memory soft limit that allows for greater
   782  sharing of memory. Under normal circumstances, containers can use as much of
   783  the memory as needed and are constrained only by the hard limits set with the
   784  `-m`/`--memory` option. When memory reservation is set, Docker detects memory
   785  contention or low memory and forces containers to restrict their consumption to
   786  a reservation limit.
   787  
   788  Always set the memory reservation value below the hard limit, otherwise the hard
   789  limit takes precedence. A reservation of 0 is the same as setting no
   790  reservation. By default (without reservation set), memory reservation is the
   791  same as the hard memory limit.
   792  
   793  Memory reservation is a soft-limit feature and does not guarantee the limit
   794  won't be exceeded. Instead, the feature attempts to ensure that, when memory is
   795  heavily contended for, memory is allocated based on the reservation hints/setup.
   796  
   797  The following example limits the memory (`-m`) to 500M and sets the memory
   798  reservation to 200M.
   799  
   800  ```bash
   801  $ docker run -it -m 500M --memory-reservation 200M ubuntu:14.04 /bin/bash
   802  ```
   803  
   804  Under this configuration, when the container consumes memory more than 200M and
   805  less than 500M, the next system memory reclaim attempts to shrink container
   806  memory below 200M.
   807  
   808  The following example set memory reservation to 1G without a hard memory limit.
   809  
   810  ```bash
   811  $ docker run -it --memory-reservation 1G ubuntu:14.04 /bin/bash
   812  ```
   813  
   814  The container can use as much memory as it needs. The memory reservation setting
   815  ensures the container doesn't consume too much memory for long time, because
   816  every memory reclaim shrinks the container's consumption to the reservation.
   817  
   818  By default, kernel kills processes in a container if an out-of-memory (OOM)
   819  error occurs. To change this behaviour, use the `--oom-kill-disable` option.
   820  Only disable the OOM killer on containers where you have also set the
   821  `-m/--memory` option. If the `-m` flag is not set, this can result in the host
   822  running out of memory and require killing the host's system processes to free
   823  memory.
   824  
   825  The following example limits the memory to 100M and disables the OOM killer for
   826  this container:
   827  
   828      $ docker run -it -m 100M --oom-kill-disable ubuntu:14.04 /bin/bash
   829  
   830  The following example, illustrates a dangerous way to use the flag:
   831  
   832      $ docker run -it --oom-kill-disable ubuntu:14.04 /bin/bash
   833  
   834  The container has unlimited memory which can cause the host to run out memory
   835  and require killing system processes to free memory. The `--oom-score-adj`
   836  parameter can be changed to select the priority of which containers will
   837  be killed when the system is out of memory, with negative scores making them
   838  less likely to be killed an positive more likely.
   839  
   840  ### Kernel memory constraints
   841  
   842  Kernel memory is fundamentally different than user memory as kernel memory can't
   843  be swapped out. The inability to swap makes it possible for the container to
   844  block system services by consuming too much kernel memory. Kernel memory includes:
   845  
   846   - stack pages
   847   - slab pages
   848   - sockets memory pressure
   849   - tcp memory pressure
   850  
   851  You can setup kernel memory limit to constrain these kinds of memory. For example,
   852  every process consumes some stack pages. By limiting kernel memory, you can
   853  prevent new processes from being created when the kernel memory usage is too high.
   854  
   855  Kernel memory is never completely independent of user memory. Instead, you limit
   856  kernel memory in the context of the user memory limit. Assume "U" is the user memory
   857  limit and "K" the kernel limit. There are three possible ways to set limits:
   858  
   859  <table>
   860    <thead>
   861      <tr>
   862        <th>Option</th>
   863        <th>Result</th>
   864      </tr>
   865    </thead>
   866    <tbody>
   867      <tr>
   868        <td class="no-wrap"><strong>U != 0, K = inf</strong> (default)</td>
   869        <td>
   870          This is the standard memory limitation mechanism already present before using
   871          kernel memory. Kernel memory is completely ignored.
   872        </td>
   873      </tr>
   874      <tr>
   875        <td class="no-wrap"><strong>U != 0, K &lt; U</strong></td>
   876        <td>
   877          Kernel memory is a subset of the user memory. This setup is useful in
   878          deployments where the total amount of memory per-cgroup is overcommitted.
   879          Overcommitting kernel memory limits is definitely not recommended, since the
   880          box can still run out of non-reclaimable memory.
   881          In this case, you can configure K so that the sum of all groups is
   882          never greater than the total memory. Then, freely set U at the expense of
   883          the system's service quality.
   884        </td>
   885      </tr>
   886      <tr>
   887        <td class="no-wrap"><strong>U != 0, K &gt; U</strong></td>
   888        <td>
   889          Since kernel memory charges are also fed to the user counter and reclamation
   890          is triggered for the container for both kinds of memory. This configuration
   891          gives the admin a unified view of memory. It is also useful for people
   892          who just want to track kernel memory usage.
   893        </td>
   894      </tr>
   895    </tbody>
   896  </table>
   897  
   898  Examples:
   899  
   900      $ docker run -it -m 500M --kernel-memory 50M ubuntu:14.04 /bin/bash
   901  
   902  We set memory and kernel memory, so the processes in the container can use
   903  500M memory in total, in this 500M memory, it can be 50M kernel memory tops.
   904  
   905      $ docker run -it --kernel-memory 50M ubuntu:14.04 /bin/bash
   906  
   907  We set kernel memory without **-m**, so the processes in the container can
   908  use as much memory as they want, but they can only use 50M kernel memory.
   909  
   910  ### Swappiness constraint
   911  
   912  By default, a container's kernel can swap out a percentage of anonymous pages.
   913  To set this percentage for a container, specify a `--memory-swappiness` value
   914  between 0 and 100. A value of 0 turns off anonymous page swapping. A value of
   915  100 sets all anonymous pages as swappable. By default, if you are not using
   916  `--memory-swappiness`, memory swappiness value will be inherited from the parent.
   917  
   918  For example, you can set:
   919  
   920      $ docker run -it --memory-swappiness=0 ubuntu:14.04 /bin/bash
   921  
   922  Setting the `--memory-swappiness` option is helpful when you want to retain the
   923  container's working set and to avoid swapping performance penalties.
   924  
   925  ### CPU share constraint
   926  
   927  By default, all containers get the same proportion of CPU cycles. This proportion
   928  can be modified by changing the container's CPU share weighting relative
   929  to the weighting of all other running containers.
   930  
   931  To modify the proportion from the default of 1024, use the `-c` or `--cpu-shares`
   932  flag to set the weighting to 2 or higher. If 0 is set, the system will ignore the
   933  value and use the default of 1024.
   934  
   935  The proportion will only apply when CPU-intensive processes are running.
   936  When tasks in one container are idle, other containers can use the
   937  left-over CPU time. The actual amount of CPU time will vary depending on
   938  the number of containers running on the system.
   939  
   940  For example, consider three containers, one has a cpu-share of 1024 and
   941  two others have a cpu-share setting of 512. When processes in all three
   942  containers attempt to use 100% of CPU, the first container would receive
   943  50% of the total CPU time. If you add a fourth container with a cpu-share
   944  of 1024, the first container only gets 33% of the CPU. The remaining containers
   945  receive 16.5%, 16.5% and 33% of the CPU.
   946  
   947  On a multi-core system, the shares of CPU time are distributed over all CPU
   948  cores. Even if a container is limited to less than 100% of CPU time, it can
   949  use 100% of each individual CPU core.
   950  
   951  For example, consider a system with more than three cores. If you start one
   952  container `{C0}` with `-c=512` running one process, and another container
   953  `{C1}` with `-c=1024` running two processes, this can result in the following
   954  division of CPU shares:
   955  
   956      PID    container	CPU	CPU share
   957      100    {C0}		0	100% of CPU0
   958      101    {C1}		1	100% of CPU1
   959      102    {C1}		2	100% of CPU2
   960  
   961  ### CPU period constraint
   962  
   963  The default CPU CFS (Completely Fair Scheduler) period is 100ms. We can use
   964  `--cpu-period` to set the period of CPUs to limit the container's CPU usage.
   965  And usually `--cpu-period` should work with `--cpu-quota`.
   966  
   967  Examples:
   968  
   969      $ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash
   970  
   971  If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms.
   972  
   973  For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
   974  
   975  ### Cpuset constraint
   976  
   977  We can set cpus in which to allow execution for containers.
   978  
   979  Examples:
   980  
   981      $ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash
   982  
   983  This means processes in container can be executed on cpu 1 and cpu 3.
   984  
   985      $ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash
   986  
   987  This means processes in container can be executed on cpu 0, cpu 1 and cpu 2.
   988  
   989  We can set mems in which to allow execution for containers. Only effective
   990  on NUMA systems.
   991  
   992  Examples:
   993  
   994      $ docker run -it --cpuset-mems="1,3" ubuntu:14.04 /bin/bash
   995  
   996  This example restricts the processes in the container to only use memory from
   997  memory nodes 1 and 3.
   998  
   999      $ docker run -it --cpuset-mems="0-2" ubuntu:14.04 /bin/bash
  1000  
  1001  This example restricts the processes in the container to only use memory from
  1002  memory nodes 0, 1 and 2.
  1003  
  1004  ### CPU quota constraint
  1005  
  1006  The `--cpu-quota` flag limits the container's CPU usage. The default 0 value
  1007  allows the container to take 100% of a CPU resource (1 CPU). The CFS (Completely Fair
  1008  Scheduler) handles resource allocation for executing processes and is default
  1009  Linux Scheduler used by the kernel. Set this value to 50000 to limit the container
  1010  to 50% of a CPU resource. For multiple CPUs, adjust the `--cpu-quota` as necessary.
  1011  For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
  1012  
  1013  ### Block IO bandwidth (Blkio) constraint
  1014  
  1015  By default, all containers get the same proportion of block IO bandwidth
  1016  (blkio). This proportion is 500. To modify this proportion, change the
  1017  container's blkio weight relative to the weighting of all other running
  1018  containers using the `--blkio-weight` flag.
  1019  
  1020  > **Note:** The blkio weight setting is only available for direct IO. Buffered IO
  1021  > is not currently supported.
  1022  
  1023  The `--blkio-weight` flag can set the weighting to a value between 10 to 1000.
  1024  For example, the commands below create two containers with different blkio
  1025  weight:
  1026  
  1027      $ docker run -it --name c1 --blkio-weight 300 ubuntu:14.04 /bin/bash
  1028      $ docker run -it --name c2 --blkio-weight 600 ubuntu:14.04 /bin/bash
  1029  
  1030  If you do block IO in the two containers at the same time, by, for example:
  1031  
  1032      $ time dd if=/mnt/zerofile of=test.out bs=1M count=1024 oflag=direct
  1033  
  1034  You'll find that the proportion of time is the same as the proportion of blkio
  1035  weights of the two containers.
  1036  
  1037  The `--blkio-weight-device="DEVICE_NAME:WEIGHT"` flag sets a specific device weight.
  1038  The `DEVICE_NAME:WEIGHT` is a string containing a colon-separated device name and weight.
  1039  For example, to set `/dev/sda` device weight to `200`:
  1040  
  1041      $ docker run -it \
  1042          --blkio-weight-device "/dev/sda:200" \
  1043          ubuntu
  1044  
  1045  If you specify both the `--blkio-weight` and `--blkio-weight-device`, Docker
  1046  uses the `--blkio-weight` as the default weight and uses `--blkio-weight-device`
  1047  to override this default with a new value on a specific device.
  1048  The following example uses a default weight of `300` and overrides this default
  1049  on `/dev/sda` setting that weight to `200`:
  1050  
  1051      $ docker run -it \
  1052          --blkio-weight 300 \
  1053          --blkio-weight-device "/dev/sda:200" \
  1054          ubuntu
  1055  
  1056  The `--device-read-bps` flag limits the read rate (bytes per second) from a device.
  1057  For example, this command creates a container and limits the read rate to `1mb`
  1058  per second from `/dev/sda`:
  1059  
  1060      $ docker run -it --device-read-bps /dev/sda:1mb ubuntu
  1061  
  1062  The `--device-write-bps` flag limits the write rate (bytes per second)to a device.
  1063  For example, this command creates a container and limits the write rate to `1mb`
  1064  per second for `/dev/sda`:
  1065  
  1066      $ docker run -it --device-write-bps /dev/sda:1mb ubuntu
  1067  
  1068  Both flags take limits in the `<device-path>:<limit>[unit]` format. Both read
  1069  and write rates must be a positive integer. You can specify the rate in `kb`
  1070  (kilobytes), `mb` (megabytes), or `gb` (gigabytes).
  1071  
  1072  The `--device-read-iops` flag limits read rate (IO per second) from a device.
  1073  For example, this command creates a container and limits the read rate to
  1074  `1000` IO per second from `/dev/sda`:
  1075  
  1076      $ docker run -ti --device-read-iops /dev/sda:1000 ubuntu
  1077  
  1078  The `--device-write-iops` flag limits write rate (IO per second) to a device.
  1079  For example, this command creates a container and limits the write rate to
  1080  `1000` IO per second to `/dev/sda`:
  1081  
  1082      $ docker run -ti --device-write-iops /dev/sda:1000 ubuntu
  1083  
  1084  Both flags take limits in the `<device-path>:<limit>` format. Both read and
  1085  write rates must be a positive integer.
  1086  
  1087  ## Additional groups
  1088      --group-add: Add additional groups to run as
  1089  
  1090  By default, the docker container process runs with the supplementary groups looked
  1091  up for the specified user. If one wants to add more to that list of groups, then
  1092  one can use this flag:
  1093  
  1094      $ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id
  1095      uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777
  1096  
  1097  ## Runtime privilege and Linux capabilities
  1098  
  1099      --cap-add: Add Linux capabilities
  1100      --cap-drop: Drop Linux capabilities
  1101      --privileged=false: Give extended privileges to this container
  1102      --device=[]: Allows you to run devices inside the container without the --privileged flag.
  1103  
  1104  By default, Docker containers are "unprivileged" and cannot, for
  1105  example, run a Docker daemon inside a Docker container. This is because
  1106  by default a container is not allowed to access any devices, but a
  1107  "privileged" container is given access to all devices (see
  1108  the documentation on [cgroups devices](https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt)).
  1109  
  1110  When the operator executes `docker run --privileged`, Docker will enable
  1111  to access to all devices on the host as well as set some configuration
  1112  in AppArmor or SELinux to allow the container nearly all the same access to the
  1113  host as processes running outside containers on the host. Additional
  1114  information about running with `--privileged` is available on the
  1115  [Docker Blog](http://blog.docker.com/2013/09/docker-can-now-run-within-docker/).
  1116  
  1117  If you want to limit access to a specific device or devices you can use
  1118  the `--device` flag. It allows you to specify one or more devices that
  1119  will be accessible within the container.
  1120  
  1121      $ docker run --device=/dev/snd:/dev/snd ...
  1122  
  1123  By default, the container will be able to `read`, `write`, and `mknod` these devices.
  1124  This can be overridden using a third `:rwm` set of options to each `--device` flag:
  1125  
  1126      $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk  /dev/xvdc
  1127  
  1128      Command (m for help): q
  1129      $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk  /dev/xvdc
  1130      You will not be able to write the partition table.
  1131  
  1132      Command (m for help): q
  1133  
  1134      $ docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk  /dev/xvdc
  1135          crash....
  1136  
  1137      $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk  /dev/xvdc
  1138      fdisk: unable to open /dev/xvdc: Operation not permitted
  1139  
  1140  In addition to `--privileged`, the operator can have fine grain control over the
  1141  capabilities using `--cap-add` and `--cap-drop`. By default, Docker has a default
  1142  list of capabilities that are kept. The following table lists the Linux capability
  1143  options which are allowed by default and can be dropped.
  1144  
  1145  | Capability Key   | Capability Description                                                                                                        |
  1146  | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1147  | SETPCAP          | Modify process capabilities.                                                                                                  |
  1148  | MKNOD            | Create special files using mknod(2).                                                                                          |
  1149  | AUDIT_WRITE      | Write records to kernel auditing log.                                                                                         |
  1150  | CHOWN            | Make arbitrary changes to file UIDs and GIDs (see chown(2)).                                                                  |
  1151  | NET_RAW          | Use RAW and PACKET sockets.                                                                                                   |
  1152  | DAC_OVERRIDE     | Bypass file read, write, and execute permission checks.                                                                       |
  1153  | FOWNER           | Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. |
  1154  | FSETID           | Don't clear set-user-ID and set-group-ID permission bits when a file is modified.                                             |
  1155  | KILL             | Bypass permission checks for sending signals.                                                                                 |
  1156  | SETGID           | Make arbitrary manipulations of process GIDs and supplementary GID list.                                                      |
  1157  | SETUID           | Make arbitrary manipulations of process UIDs.                                                                                 |
  1158  | NET_BIND_SERVICE | Bind a socket to internet domain privileged ports (port numbers less than 1024).                                              |
  1159  | SYS_CHROOT       | Use chroot(2), change root directory.                                                                                         |
  1160  | SETFCAP          | Set file capabilities.                                                                                                        |
  1161  
  1162  The next table shows the capabilities which are not granted by default and may be added.
  1163  
  1164  | Capability Key   | Capability Description                                                                                                        |
  1165  | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1166  | SYS_MODULE       | Load and unload kernel modules.                                                                                               |
  1167  | SYS_RAWIO        | Perform I/O port operations (iopl(2) and ioperm(2)).                                                                          |
  1168  | SYS_PACCT        | Use acct(2), switch process accounting on or off.                                                                             |
  1169  | SYS_ADMIN        | Perform a range of system administration operations.                                                                          |
  1170  | SYS_NICE         | Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes.                         |
  1171  | SYS_RESOURCE     | Override resource Limits.                                                                                                     |
  1172  | SYS_TIME         | Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock.                                    |
  1173  | SYS_TTY_CONFIG   | Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals.                                           |
  1174  | AUDIT_CONTROL    | Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules.               |
  1175  | MAC_OVERRIDE     | Allow MAC configuration or state changes. Implemented for the Smack LSM.                                                      |
  1176  | MAC_ADMIN        | Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM).                               |
  1177  | NET_ADMIN        | Perform various network-related operations.                                                                                   |
  1178  | SYSLOG           | Perform privileged syslog(2) operations.                                                                                      |
  1179  | DAC_READ_SEARCH  | Bypass file read permission checks and directory read and execute permission checks.                                          |
  1180  | LINUX_IMMUTABLE  | Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags.                                                                        |
  1181  | NET_BROADCAST    | Make socket broadcasts, and listen to multicasts.                                                                             |
  1182  | IPC_LOCK         | Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)).                                                                      |
  1183  | IPC_OWNER        | Bypass permission checks for operations on System V IPC objects.                                                              |
  1184  | SYS_PTRACE       | Trace arbitrary processes using ptrace(2).                                                                                    |
  1185  | SYS_BOOT         | Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution.                                            |
  1186  | LEASE            | Establish leases on arbitrary files (see fcntl(2)).                                                                           |
  1187  | WAKE_ALARM       | Trigger something that will wake up the system.                                                                               |
  1188  | BLOCK_SUSPEND    | Employ features that can block system suspend.                                                                                |
  1189  
  1190  Further reference information is available on the [capabilities(7) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)
  1191  
  1192  Both flags support the value `ALL`, so if the
  1193  operator wants to have all capabilities but `MKNOD` they could use:
  1194  
  1195      $ docker run --cap-add=ALL --cap-drop=MKNOD ...
  1196  
  1197  For interacting with the network stack, instead of using `--privileged` they
  1198  should use `--cap-add=NET_ADMIN` to modify the network interfaces.
  1199  
  1200      $ docker run -it --rm  ubuntu:14.04 ip link add dummy0 type dummy
  1201      RTNETLINK answers: Operation not permitted
  1202      $ docker run -it --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add dummy0 type dummy
  1203  
  1204  To mount a FUSE based filesystem, you need to combine both `--cap-add` and
  1205  `--device`:
  1206  
  1207      $ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs sven@10.10.10.20:/home/sven /mnt
  1208      fuse: failed to open /dev/fuse: Operation not permitted
  1209      $ docker run --rm -it --device /dev/fuse sshfs sshfs sven@10.10.10.20:/home/sven /mnt
  1210      fusermount: mount failed: Operation not permitted
  1211      $ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
  1212      # sshfs sven@10.10.10.20:/home/sven /mnt
  1213      The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established.
  1214      ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6.
  1215      Are you sure you want to continue connecting (yes/no)? yes
  1216      sven@10.10.10.20's password:
  1217      root@30aa0cfaf1b5:/# ls -la /mnt/src/docker
  1218      total 1516
  1219      drwxrwxr-x 1 1000 1000   4096 Dec  4 06:08 .
  1220      drwxrwxr-x 1 1000 1000   4096 Dec  4 11:46 ..
  1221      -rw-rw-r-- 1 1000 1000     16 Oct  8 00:09 .dockerignore
  1222      -rwxrwxr-x 1 1000 1000    464 Oct  8 00:09 .drone.yml
  1223      drwxrwxr-x 1 1000 1000   4096 Dec  4 06:11 .git
  1224      -rw-rw-r-- 1 1000 1000    461 Dec  4 06:08 .gitignore
  1225      ....
  1226  
  1227  The default seccomp profile will adjust to the selected capabilities, in order to allow
  1228  use of facilities allowed by the capabilities, so you should not have to adjust this,
  1229  since Docker 1.12. In Docker 1.10 and 1.11 this did not happen and it may be necessary
  1230  to use a custom seccomp profile or use `--security-opt seccomp=unconfined` when adding
  1231  capabilities.
  1232  
  1233  It is only possible to grant capabilities to a container running as a user other than `root`
  1234  on a system with a Linux kernel version of 4.3 or later, as this requires "ambient capabilities"
  1235  to be granted. These will be added if the kernel allows it from Docker version 1.13.
  1236  
  1237  ## Logging drivers (--log-driver)
  1238  
  1239  The container can have a different logging driver than the Docker daemon. Use
  1240  the `--log-driver=VALUE` with the `docker run` command to configure the
  1241  container's logging driver. The following options are supported:
  1242  
  1243  | Driver      | Description                                                                                                                   |
  1244  | ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1245  | `none`      | Disables any logging for the container. `docker logs` won't be available with this driver.                                    |
  1246  | `json-file` | Default logging driver for Docker. Writes JSON messages to file.  No logging options are supported for this driver.           |
  1247  | `syslog`    | Syslog logging driver for Docker. Writes log messages to syslog.                                                              |
  1248  | `journald`  | Journald logging driver for Docker. Writes log messages to `journald`.                                                        |
  1249  | `gelf`      | Graylog Extended Log Format (GELF) logging driver for Docker. Writes log messages to a GELF endpoint likeGraylog or Logstash. |
  1250  | `fluentd`   | Fluentd logging driver for Docker. Writes log messages to `fluentd` (forward input).                                          |
  1251  | `awslogs`   | Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs                               |
  1252  | `splunk`    | Splunk logging driver for Docker. Writes log messages to `splunk` using Event Http Collector.                                 |
  1253  
  1254  The `docker logs` command is available only for the `json-file` and `journald`
  1255  logging drivers.  For detailed information on working with logging drivers, see
  1256  [Configure a logging driver](https://docs.docker.com/engine/admin/logging/overview/).
  1257  
  1258  
  1259  ## Overriding Dockerfile image defaults
  1260  
  1261  When a developer builds an image from a [*Dockerfile*](builder.md)
  1262  or when she commits it, the developer can set a number of default parameters
  1263  that take effect when the image starts up as a container.
  1264  
  1265  Four of the Dockerfile commands cannot be overridden at runtime: `FROM`,
  1266  `MAINTAINER`, `RUN`, and `ADD`. Everything else has a corresponding override
  1267  in `docker run`. We'll go through what the developer might have set in each
  1268  Dockerfile instruction and how the operator can override that setting.
  1269  
  1270   - [CMD (Default Command or Options)](#cmd-default-command-or-options)
  1271   - [ENTRYPOINT (Default Command to Execute at Runtime)](
  1272      #entrypoint-default-command-to-execute-at-runtime)
  1273   - [EXPOSE (Incoming Ports)](#expose-incoming-ports)
  1274   - [ENV (Environment Variables)](#env-environment-variables)
  1275   - [HEALTHCHECK](#healthcheck)
  1276   - [VOLUME (Shared Filesystems)](#volume-shared-filesystems)
  1277   - [USER](#user)
  1278   - [WORKDIR](#workdir)
  1279  
  1280  ### CMD (default command or options)
  1281  
  1282  Recall the optional `COMMAND` in the Docker
  1283  commandline:
  1284  
  1285      $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  1286  
  1287  This command is optional because the person who created the `IMAGE` may
  1288  have already provided a default `COMMAND` using the Dockerfile `CMD`
  1289  instruction. As the operator (the person running a container from the
  1290  image), you can override that `CMD` instruction just by specifying a new
  1291  `COMMAND`.
  1292  
  1293  If the image also specifies an `ENTRYPOINT` then the `CMD` or `COMMAND`
  1294  get appended as arguments to the `ENTRYPOINT`.
  1295  
  1296  ### ENTRYPOINT (default command to execute at runtime)
  1297  
  1298      --entrypoint="": Overwrite the default entrypoint set by the image
  1299  
  1300  The `ENTRYPOINT` of an image is similar to a `COMMAND` because it
  1301  specifies what executable to run when the container starts, but it is
  1302  (purposely) more difficult to override. The `ENTRYPOINT` gives a
  1303  container its default nature or behavior, so that when you set an
  1304  `ENTRYPOINT` you can run the container *as if it were that binary*,
  1305  complete with default options, and you can pass in more options via the
  1306  `COMMAND`. But, sometimes an operator may want to run something else
  1307  inside the container, so you can override the default `ENTRYPOINT` at
  1308  runtime by using a string to specify the new `ENTRYPOINT`. Here is an
  1309  example of how to run a shell in a container that has been set up to
  1310  automatically run something else (like `/usr/bin/redis-server`):
  1311  
  1312      $ docker run -it --entrypoint /bin/bash example/redis
  1313  
  1314  or two examples of how to pass more parameters to that ENTRYPOINT:
  1315  
  1316      $ docker run -it --entrypoint /bin/bash example/redis -c ls -l
  1317      $ docker run -it --entrypoint /usr/bin/redis-cli example/redis --help
  1318  
  1319  You can reset a containers entrypoint by passing an empty string, for example:
  1320  
  1321      $ docker run -it --entrypoint="" mysql bash
  1322  
  1323  > **Note**: Passing `--entrypoint` will clear out any default command set on the
  1324  > image (i.e. any `CMD` instruction in the Dockerfile used to build it).
  1325  
  1326  ### EXPOSE (incoming ports)
  1327  
  1328  The following `run` command options work with container networking:
  1329  
  1330      --expose=[]: Expose a port or a range of ports inside the container.
  1331                   These are additional to those exposed by the `EXPOSE` instruction
  1332      -P         : Publish all exposed ports to the host interfaces
  1333      -p=[]      : Publish a container᾿s port or a range of ports to the host
  1334                     format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
  1335                     Both hostPort and containerPort can be specified as a
  1336                     range of ports. When specifying ranges for both, the
  1337                     number of container ports in the range must match the
  1338                     number of host ports in the range, for example:
  1339                         -p 1234-1236:1234-1236/tcp
  1340  
  1341                     When specifying a range for hostPort only, the
  1342                     containerPort must not be a range.  In this case the
  1343                     container port is published somewhere within the
  1344                     specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`)
  1345  
  1346                     (use 'docker port' to see the actual mapping)
  1347  
  1348      --link=""  : Add link to another container (<name or id>:alias or <name or id>)
  1349  
  1350  With the exception of the `EXPOSE` directive, an image developer hasn't
  1351  got much control over networking. The `EXPOSE` instruction defines the
  1352  initial incoming ports that provide services. These ports are available
  1353  to processes inside the container. An operator can use the `--expose`
  1354  option to add to the exposed ports.
  1355  
  1356  To expose a container's internal port, an operator can start the
  1357  container with the `-P` or `-p` flag. The exposed port is accessible on
  1358  the host and the ports are available to any client that can reach the
  1359  host.
  1360  
  1361  The `-P` option publishes all the ports to the host interfaces. Docker
  1362  binds each exposed port to a random port on the host. The range of
  1363  ports are within an *ephemeral port range* defined by
  1364  `/proc/sys/net/ipv4/ip_local_port_range`. Use the `-p` flag to
  1365  explicitly map a single port or range of ports.
  1366  
  1367  The port number inside the container (where the service listens) does
  1368  not need to match the port number exposed on the outside of the
  1369  container (where clients connect). For example, inside the container an
  1370  HTTP service is listening on port 80 (and so the image developer
  1371  specifies `EXPOSE 80` in the Dockerfile). At runtime, the port might be
  1372  bound to 42800 on the host. To find the mapping between the host ports
  1373  and the exposed ports, use `docker port`.
  1374  
  1375  If the operator uses `--link` when starting a new client container in the
  1376  default bridge network, then the client container can access the exposed
  1377  port via a private networking interface.
  1378  If `--link` is used when starting a container in a user-defined network as
  1379  described in [*Docker network overview*](https://docs.docker.com/engine/userguide/networking/),
  1380  it will provide a named alias for the container being linked to.
  1381  
  1382  ### ENV (environment variables)
  1383  
  1384  When a new container is created, Docker will set the following environment
  1385  variables automatically:
  1386  
  1387  | Variable | Value |
  1388  | -------- | ----- |
  1389  | `HOME` | Set based on the value of `USER` |
  1390  | `HOSTNAME` | The hostname associated with the container |
  1391  | `PATH` | Includes popular directories, such as `:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin` |
  1392  | `TERM` | `xterm` if the container is allocated a pseudo-TTY |
  1393  
  1394  Additionally, the operator can **set any environment variable** in the
  1395  container by using one or more `-e` flags, even overriding those mentioned
  1396  above, or already defined by the developer with a Dockerfile `ENV`:
  1397  
  1398      $ docker run -e "deep=purple" --rm ubuntu /bin/bash -c export
  1399      declare -x HOME="/"
  1400      declare -x HOSTNAME="85bc26a0e200"
  1401      declare -x OLDPWD
  1402      declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  1403      declare -x PWD="/"
  1404      declare -x SHLVL="1"
  1405      declare -x deep="purple"
  1406  
  1407  Similarly the operator can set the **hostname** with `-h`.
  1408  
  1409  ### HEALTHCHECK
  1410  
  1411  ```
  1412    --health-cmd            Command to run to check health
  1413    --health-interval       Time between running the check
  1414    --health-retries        Consecutive failures needed to report unhealthy
  1415    --health-timeout        Maximum time to allow one check to run
  1416    --no-healthcheck        Disable any container-specified HEALTHCHECK
  1417  ```
  1418  
  1419  Example:
  1420  
  1421      {% raw %}
  1422      $ docker run --name=test -d \
  1423          --health-cmd='stat /etc/passwd || exit 1' \
  1424          --health-interval=2s \
  1425          busybox sleep 1d
  1426      $ sleep 2; docker inspect --format='{{.State.Health.Status}}' test
  1427      healthy
  1428      $ docker exec test rm /etc/passwd
  1429      $ sleep 2; docker inspect --format='{{json .State.Health}}' test
  1430      {
  1431        "Status": "unhealthy",
  1432        "FailingStreak": 3,
  1433        "Log": [
  1434          {
  1435            "Start": "2016-05-25T17:22:04.635478668Z",
  1436            "End": "2016-05-25T17:22:04.7272552Z",
  1437            "ExitCode": 0,
  1438            "Output": "  File: /etc/passwd\n  Size: 334       \tBlocks: 8          IO Block: 4096   regular file\nDevice: 32h/50d\tInode: 12          Links: 1\nAccess: (0664/-rw-rw-r--)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..."
  1439          },
  1440          {
  1441            "Start": "2016-05-25T17:22:06.732900633Z",
  1442            "End": "2016-05-25T17:22:06.822168935Z",
  1443            "ExitCode": 0,
  1444            "Output": "  File: /etc/passwd\n  Size: 334       \tBlocks: 8          IO Block: 4096   regular file\nDevice: 32h/50d\tInode: 12          Links: 1\nAccess: (0664/-rw-rw-r--)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2015-12-05 22:05:32.000000000\nModify: 2015..."
  1445          },
  1446          {
  1447            "Start": "2016-05-25T17:22:08.823956535Z",
  1448            "End": "2016-05-25T17:22:08.897359124Z",
  1449            "ExitCode": 1,
  1450            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1451          },
  1452          {
  1453            "Start": "2016-05-25T17:22:10.898802931Z",
  1454            "End": "2016-05-25T17:22:10.969631866Z",
  1455            "ExitCode": 1,
  1456            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1457          },
  1458          {
  1459            "Start": "2016-05-25T17:22:12.971033523Z",
  1460            "End": "2016-05-25T17:22:13.082015516Z",
  1461            "ExitCode": 1,
  1462            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1463          }
  1464        ]
  1465      }
  1466      {% endraw %}
  1467  
  1468  The health status is also displayed in the `docker ps` output.
  1469  
  1470  ### TMPFS (mount tmpfs filesystems)
  1471  
  1472  ```bash
  1473  --tmpfs=[]: Create a tmpfs mount with: container-dir[:<options>],
  1474              where the options are identical to the Linux
  1475              'mount -t tmpfs -o' command.
  1476  ```
  1477  
  1478  The example below mounts an empty tmpfs into the container with the `rw`,
  1479  `noexec`, `nosuid`, and `size=65536k` options.
  1480  
  1481      $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
  1482  
  1483  ### VOLUME (shared filesystems)
  1484  
  1485      -v, --volume=[host-src:]container-dest[:<options>]: Bind mount a volume.
  1486      The comma-delimited `options` are [rw|ro], [z|Z],
  1487      [[r]shared|[r]slave|[r]private], and [nocopy].
  1488      The 'host-src' is an absolute path or a name value.
  1489  
  1490      If neither 'rw' or 'ro' is specified then the volume is mounted in
  1491      read-write mode.
  1492  
  1493      The `nocopy` modes is used to disable automatic copying requested volume
  1494      path in the container to the volume storage location.
  1495      For named volumes, `copy` is the default mode. Copy modes are not supported
  1496      for bind-mounted volumes.
  1497  
  1498      --volumes-from="": Mount all volumes from the given container(s)
  1499  
  1500  > **Note**:
  1501  > When using systemd to manage the Docker daemon's start and stop, in the systemd
  1502  > unit file there is an option to control mount propagation for the Docker daemon
  1503  > itself, called `MountFlags`. The value of this setting may cause Docker to not
  1504  > see mount propagation changes made on the mount point. For example, if this value
  1505  > is `slave`, you may not be able to use the `shared` or `rshared` propagation on
  1506  > a volume.
  1507  
  1508  The volumes commands are complex enough to have their own documentation
  1509  in section [*Manage data in
  1510  containers*](https://docs.docker.com/engine/tutorials/dockervolumes/). A developer can define
  1511  one or more `VOLUME`'s associated with an image, but only the operator
  1512  can give access from one container to another (or from a container to a
  1513  volume mounted on the host).
  1514  
  1515  The `container-dest` must always be an absolute path such as `/src/docs`.
  1516  The `host-src` can either be an absolute path or a `name` value. If you
  1517  supply an absolute path for the `host-dir`, Docker bind-mounts to the path
  1518  you specify. If you supply a `name`, Docker creates a named volume by that `name`.
  1519  
  1520  A `name` value must start with an alphanumeric character,
  1521  followed by `a-z0-9`, `_` (underscore), `.` (period) or `-` (hyphen).
  1522  An absolute path starts with a `/` (forward slash).
  1523  
  1524  For example, you can specify either `/foo` or `foo` for a `host-src` value.
  1525  If you supply the `/foo` value, Docker creates a bind-mount. If you supply
  1526  the `foo` specification, Docker creates a named volume.
  1527  
  1528  ### USER
  1529  
  1530  `root` (id = 0) is the default user within a container. The image developer can
  1531  create additional users. Those users are accessible by name.  When passing a numeric
  1532  ID, the user does not have to exist in the container.
  1533  
  1534  The developer can set a default user to run the first process with the
  1535  Dockerfile `USER` instruction. When starting a container, the operator can override
  1536  the `USER` instruction by passing the `-u` option.
  1537  
  1538      -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.
  1539  
  1540      The followings examples are all valid:
  1541      --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]
  1542  
  1543  > **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647.
  1544  
  1545  ### WORKDIR
  1546  
  1547  The default working directory for running binaries within a container is the
  1548  root directory (`/`), but the developer can set a different default with the
  1549  Dockerfile `WORKDIR` command. The operator can override this with:
  1550  
  1551      -w="": Working directory inside the container