github.com/olljanat/moby@v1.13.1/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 to both stdout and stderr
   127  ]( https://github.com/docker/docker/blob/4118e0c9eebda2412a09ae66e90c34b85fae3275/runconfig/opts/parse.go#L267).
   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 <i>name</i> or <i>id</i>.
   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 <code>docker network create</code> 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-option` 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-option` 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  | `--cpus=0.000`             | Number of CPUs. Number is a fractional number. 0.000 means no limit.                                                                            |
   690  | `--cpu-period=0`           | Limit the CPU CFS (Completely Fair Scheduler) period                                                                                            |
   691  | `--cpuset-cpus=""`         | CPUs in which to allow execution (0-3, 0,1)                                                                                                     |
   692  | `--cpuset-mems=""`         | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.                                                     |
   693  | `--cpu-quota=0`            | Limit the CPU CFS (Completely Fair Scheduler) quota                                                                                             |
   694  | `--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.    |
   695  | `--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.   |
   696  | `--blkio-weight=0`         | Block IO weight (relative weight) accepts a weight value between 10 and 1000.                                                                   |
   697  | `--blkio-weight-device=""` | Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`)                                                                          |
   698  | `--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`. |
   699  | `--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`.  |
   700  | `--device-read-iops="" `   | Limit read rate (IO per second) from a device (format: `<device-path>:<number>`). Number is a positive integer.                                 |
   701  | `--device-write-iops="" `  | Limit write rate (IO per second) to a device (format: `<device-path>:<number>`). Number is a positive integer.                                  |
   702  | `--oom-kill-disable=false` | Whether to disable OOM Killer for the container or not.                                                                                         |
   703  | `--oom-score-adj=0`        | Tune container's OOM preferences (-1000 to 1000)                                                                                                |
   704  | `--memory-swappiness=""`   | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.                                                            |
   705  | `--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`. |
   706  
   707  ### User memory constraints
   708  
   709  We have four ways to set user memory usage:
   710  
   711  <table>
   712    <thead>
   713      <tr>
   714        <th>Option</th>
   715        <th>Result</th>
   716      </tr>
   717    </thead>
   718    <tbody>
   719      <tr>
   720        <td class="no-wrap">
   721            <strong>memory=inf, memory-swap=inf</strong> (default)
   722        </td>
   723        <td>
   724          There is no memory limit for the container. The container can use
   725          as much memory as needed.
   726        </td>
   727      </tr>
   728      <tr>
   729        <td class="no-wrap"><strong>memory=L&lt;inf, memory-swap=inf</strong></td>
   730        <td>
   731          (specify memory and set memory-swap as <code>-1</code>) The container is
   732          not allowed to use more than L bytes of memory, but can use as much swap
   733          as is needed (if the host supports swap memory).
   734        </td>
   735      </tr>
   736      <tr>
   737        <td class="no-wrap"><strong>memory=L&lt;inf, memory-swap=2*L</strong></td>
   738        <td>
   739          (specify memory without memory-swap) The container is not allowed to
   740          use more than L bytes of memory, swap <i>plus</i> memory usage is double
   741          of that.
   742        </td>
   743      </tr>
   744      <tr>
   745        <td class="no-wrap">
   746            <strong>memory=L&lt;inf, memory-swap=S&lt;inf, L&lt;=S</strong>
   747        </td>
   748        <td>
   749          (specify both memory and memory-swap) The container is not allowed to
   750          use more than L bytes of memory, swap <i>plus</i> memory usage is limited
   751          by S.
   752        </td>
   753      </tr>
   754    </tbody>
   755  </table>
   756  
   757  Examples:
   758  
   759      $ docker run -it ubuntu:14.04 /bin/bash
   760  
   761  We set nothing about memory, this means the processes in the container can use
   762  as much memory and swap memory as they need.
   763  
   764      $ docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash
   765  
   766  We set memory limit and disabled swap memory limit, this means the processes in
   767  the container can use 300M memory and as much swap memory as they need (if the
   768  host supports swap memory).
   769  
   770      $ docker run -it -m 300M ubuntu:14.04 /bin/bash
   771  
   772  We set memory limit only, this means the processes in the container can use
   773  300M memory and 300M swap memory, by default, the total virtual memory size
   774  (--memory-swap) will be set as double of memory, in this case, memory + swap
   775  would be 2*300M, so processes can use 300M swap memory as well.
   776  
   777      $ docker run -it -m 300M --memory-swap 1G ubuntu:14.04 /bin/bash
   778  
   779  We set both memory and swap memory, so the processes in the container can use
   780  300M memory and 700M swap memory.
   781  
   782  Memory reservation is a kind of memory soft limit that allows for greater
   783  sharing of memory. Under normal circumstances, containers can use as much of
   784  the memory as needed and are constrained only by the hard limits set with the
   785  `-m`/`--memory` option. When memory reservation is set, Docker detects memory
   786  contention or low memory and forces containers to restrict their consumption to
   787  a reservation limit.
   788  
   789  Always set the memory reservation value below the hard limit, otherwise the hard
   790  limit takes precedence. A reservation of 0 is the same as setting no
   791  reservation. By default (without reservation set), memory reservation is the
   792  same as the hard memory limit.
   793  
   794  Memory reservation is a soft-limit feature and does not guarantee the limit
   795  won't be exceeded. Instead, the feature attempts to ensure that, when memory is
   796  heavily contended for, memory is allocated based on the reservation hints/setup.
   797  
   798  The following example limits the memory (`-m`) to 500M and sets the memory
   799  reservation to 200M.
   800  
   801  ```bash
   802  $ docker run -it -m 500M --memory-reservation 200M ubuntu:14.04 /bin/bash
   803  ```
   804  
   805  Under this configuration, when the container consumes memory more than 200M and
   806  less than 500M, the next system memory reclaim attempts to shrink container
   807  memory below 200M.
   808  
   809  The following example set memory reservation to 1G without a hard memory limit.
   810  
   811  ```bash
   812  $ docker run -it --memory-reservation 1G ubuntu:14.04 /bin/bash
   813  ```
   814  
   815  The container can use as much memory as it needs. The memory reservation setting
   816  ensures the container doesn't consume too much memory for long time, because
   817  every memory reclaim shrinks the container's consumption to the reservation.
   818  
   819  By default, kernel kills processes in a container if an out-of-memory (OOM)
   820  error occurs. To change this behaviour, use the `--oom-kill-disable` option.
   821  Only disable the OOM killer on containers where you have also set the
   822  `-m/--memory` option. If the `-m` flag is not set, this can result in the host
   823  running out of memory and require killing the host's system processes to free
   824  memory.
   825  
   826  The following example limits the memory to 100M and disables the OOM killer for
   827  this container:
   828  
   829      $ docker run -it -m 100M --oom-kill-disable ubuntu:14.04 /bin/bash
   830  
   831  The following example, illustrates a dangerous way to use the flag:
   832  
   833      $ docker run -it --oom-kill-disable ubuntu:14.04 /bin/bash
   834  
   835  The container has unlimited memory which can cause the host to run out memory
   836  and require killing system processes to free memory. The `--oom-score-adj`
   837  parameter can be changed to select the priority of which containers will
   838  be killed when the system is out of memory, with negative scores making them
   839  less likely to be killed an positive more likely.
   840  
   841  ### Kernel memory constraints
   842  
   843  Kernel memory is fundamentally different than user memory as kernel memory can't
   844  be swapped out. The inability to swap makes it possible for the container to
   845  block system services by consuming too much kernel memory. Kernel memory includes:
   846  
   847   - stack pages
   848   - slab pages
   849   - sockets memory pressure
   850   - tcp memory pressure
   851  
   852  You can setup kernel memory limit to constrain these kinds of memory. For example,
   853  every process consumes some stack pages. By limiting kernel memory, you can
   854  prevent new processes from being created when the kernel memory usage is too high.
   855  
   856  Kernel memory is never completely independent of user memory. Instead, you limit
   857  kernel memory in the context of the user memory limit. Assume "U" is the user memory
   858  limit and "K" the kernel limit. There are three possible ways to set limits:
   859  
   860  <table>
   861    <thead>
   862      <tr>
   863        <th>Option</th>
   864        <th>Result</th>
   865      </tr>
   866    </thead>
   867    <tbody>
   868      <tr>
   869        <td class="no-wrap"><strong>U != 0, K = inf</strong> (default)</td>
   870        <td>
   871          This is the standard memory limitation mechanism already present before using
   872          kernel memory. Kernel memory is completely ignored.
   873        </td>
   874      </tr>
   875      <tr>
   876        <td class="no-wrap"><strong>U != 0, K &lt; U</strong></td>
   877        <td>
   878          Kernel memory is a subset of the user memory. This setup is useful in
   879          deployments where the total amount of memory per-cgroup is overcommitted.
   880          Overcommitting kernel memory limits is definitely not recommended, since the
   881          box can still run out of non-reclaimable memory.
   882          In this case, you can configure K so that the sum of all groups is
   883          never greater than the total memory. Then, freely set U at the expense of
   884          the system's service quality.
   885        </td>
   886      </tr>
   887      <tr>
   888        <td class="no-wrap"><strong>U != 0, K &gt; U</strong></td>
   889        <td>
   890          Since kernel memory charges are also fed to the user counter and reclamation
   891          is triggered for the container for both kinds of memory. This configuration
   892          gives the admin a unified view of memory. It is also useful for people
   893          who just want to track kernel memory usage.
   894        </td>
   895      </tr>
   896    </tbody>
   897  </table>
   898  
   899  Examples:
   900  
   901      $ docker run -it -m 500M --kernel-memory 50M ubuntu:14.04 /bin/bash
   902  
   903  We set memory and kernel memory, so the processes in the container can use
   904  500M memory in total, in this 500M memory, it can be 50M kernel memory tops.
   905  
   906      $ docker run -it --kernel-memory 50M ubuntu:14.04 /bin/bash
   907  
   908  We set kernel memory without **-m**, so the processes in the container can
   909  use as much memory as they want, but they can only use 50M kernel memory.
   910  
   911  ### Swappiness constraint
   912  
   913  By default, a container's kernel can swap out a percentage of anonymous pages.
   914  To set this percentage for a container, specify a `--memory-swappiness` value
   915  between 0 and 100. A value of 0 turns off anonymous page swapping. A value of
   916  100 sets all anonymous pages as swappable. By default, if you are not using
   917  `--memory-swappiness`, memory swappiness value will be inherited from the parent.
   918  
   919  For example, you can set:
   920  
   921      $ docker run -it --memory-swappiness=0 ubuntu:14.04 /bin/bash
   922  
   923  Setting the `--memory-swappiness` option is helpful when you want to retain the
   924  container's working set and to avoid swapping performance penalties.
   925  
   926  ### CPU share constraint
   927  
   928  By default, all containers get the same proportion of CPU cycles. This proportion
   929  can be modified by changing the container's CPU share weighting relative
   930  to the weighting of all other running containers.
   931  
   932  To modify the proportion from the default of 1024, use the `-c` or `--cpu-shares`
   933  flag to set the weighting to 2 or higher. If 0 is set, the system will ignore the
   934  value and use the default of 1024.
   935  
   936  The proportion will only apply when CPU-intensive processes are running.
   937  When tasks in one container are idle, other containers can use the
   938  left-over CPU time. The actual amount of CPU time will vary depending on
   939  the number of containers running on the system.
   940  
   941  For example, consider three containers, one has a cpu-share of 1024 and
   942  two others have a cpu-share setting of 512. When processes in all three
   943  containers attempt to use 100% of CPU, the first container would receive
   944  50% of the total CPU time. If you add a fourth container with a cpu-share
   945  of 1024, the first container only gets 33% of the CPU. The remaining containers
   946  receive 16.5%, 16.5% and 33% of the CPU.
   947  
   948  On a multi-core system, the shares of CPU time are distributed over all CPU
   949  cores. Even if a container is limited to less than 100% of CPU time, it can
   950  use 100% of each individual CPU core.
   951  
   952  For example, consider a system with more than three cores. If you start one
   953  container `{C0}` with `-c=512` running one process, and another container
   954  `{C1}` with `-c=1024` running two processes, this can result in the following
   955  division of CPU shares:
   956  
   957      PID    container	CPU	CPU share
   958      100    {C0}		0	100% of CPU0
   959      101    {C1}		1	100% of CPU1
   960      102    {C1}		2	100% of CPU2
   961  
   962  ### CPU period constraint
   963  
   964  The default CPU CFS (Completely Fair Scheduler) period is 100ms. We can use
   965  `--cpu-period` to set the period of CPUs to limit the container's CPU usage.
   966  And usually `--cpu-period` should work with `--cpu-quota`.
   967  
   968  Examples:
   969  
   970      $ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash
   971  
   972  If there is 1 CPU, this means the container can get 50% CPU worth of run-time every 50ms.
   973  
   974  In addition to use `--cpu-period` and `--cpu-quota` for setting CPU period constraints,
   975  it is possible to specify `--cpus` with a float number to achieve the same purpose.
   976  For example, if there is 1 CPU, then `--cpus=0.5` will achieve the same result as
   977  setting `--cpu-period=50000` and `--cpu-quota=25000` (50% CPU).
   978  
   979  The default value for `--cpus` is `0.000`, which means there is no limit.
   980  
   981  For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
   982  
   983  ### Cpuset constraint
   984  
   985  We can set cpus in which to allow execution for containers.
   986  
   987  Examples:
   988  
   989      $ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash
   990  
   991  This means processes in container can be executed on cpu 1 and cpu 3.
   992  
   993      $ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash
   994  
   995  This means processes in container can be executed on cpu 0, cpu 1 and cpu 2.
   996  
   997  We can set mems in which to allow execution for containers. Only effective
   998  on NUMA systems.
   999  
  1000  Examples:
  1001  
  1002      $ docker run -it --cpuset-mems="1,3" ubuntu:14.04 /bin/bash
  1003  
  1004  This example restricts the processes in the container to only use memory from
  1005  memory nodes 1 and 3.
  1006  
  1007      $ docker run -it --cpuset-mems="0-2" ubuntu:14.04 /bin/bash
  1008  
  1009  This example restricts the processes in the container to only use memory from
  1010  memory nodes 0, 1 and 2.
  1011  
  1012  ### CPU quota constraint
  1013  
  1014  The `--cpu-quota` flag limits the container's CPU usage. The default 0 value
  1015  allows the container to take 100% of a CPU resource (1 CPU). The CFS (Completely Fair
  1016  Scheduler) handles resource allocation for executing processes and is default
  1017  Linux Scheduler used by the kernel. Set this value to 50000 to limit the container
  1018  to 50% of a CPU resource. For multiple CPUs, adjust the `--cpu-quota` as necessary.
  1019  For more information, see the [CFS documentation on bandwidth limiting](https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt).
  1020  
  1021  ### Block IO bandwidth (Blkio) constraint
  1022  
  1023  By default, all containers get the same proportion of block IO bandwidth
  1024  (blkio). This proportion is 500. To modify this proportion, change the
  1025  container's blkio weight relative to the weighting of all other running
  1026  containers using the `--blkio-weight` flag.
  1027  
  1028  > **Note:** The blkio weight setting is only available for direct IO. Buffered IO
  1029  > is not currently supported.
  1030  
  1031  The `--blkio-weight` flag can set the weighting to a value between 10 to 1000.
  1032  For example, the commands below create two containers with different blkio
  1033  weight:
  1034  
  1035      $ docker run -it --name c1 --blkio-weight 300 ubuntu:14.04 /bin/bash
  1036      $ docker run -it --name c2 --blkio-weight 600 ubuntu:14.04 /bin/bash
  1037  
  1038  If you do block IO in the two containers at the same time, by, for example:
  1039  
  1040      $ time dd if=/mnt/zerofile of=test.out bs=1M count=1024 oflag=direct
  1041  
  1042  You'll find that the proportion of time is the same as the proportion of blkio
  1043  weights of the two containers.
  1044  
  1045  The `--blkio-weight-device="DEVICE_NAME:WEIGHT"` flag sets a specific device weight.
  1046  The `DEVICE_NAME:WEIGHT` is a string containing a colon-separated device name and weight.
  1047  For example, to set `/dev/sda` device weight to `200`:
  1048  
  1049      $ docker run -it \
  1050          --blkio-weight-device "/dev/sda:200" \
  1051          ubuntu
  1052  
  1053  If you specify both the `--blkio-weight` and `--blkio-weight-device`, Docker
  1054  uses the `--blkio-weight` as the default weight and uses `--blkio-weight-device`
  1055  to override this default with a new value on a specific device.
  1056  The following example uses a default weight of `300` and overrides this default
  1057  on `/dev/sda` setting that weight to `200`:
  1058  
  1059      $ docker run -it \
  1060          --blkio-weight 300 \
  1061          --blkio-weight-device "/dev/sda:200" \
  1062          ubuntu
  1063  
  1064  The `--device-read-bps` flag limits the read rate (bytes per second) from a device.
  1065  For example, this command creates a container and limits the read rate to `1mb`
  1066  per second from `/dev/sda`:
  1067  
  1068      $ docker run -it --device-read-bps /dev/sda:1mb ubuntu
  1069  
  1070  The `--device-write-bps` flag limits the write rate (bytes per second)to a device.
  1071  For example, this command creates a container and limits the write rate to `1mb`
  1072  per second for `/dev/sda`:
  1073  
  1074      $ docker run -it --device-write-bps /dev/sda:1mb ubuntu
  1075  
  1076  Both flags take limits in the `<device-path>:<limit>[unit]` format. Both read
  1077  and write rates must be a positive integer. You can specify the rate in `kb`
  1078  (kilobytes), `mb` (megabytes), or `gb` (gigabytes).
  1079  
  1080  The `--device-read-iops` flag limits read rate (IO per second) from a device.
  1081  For example, this command creates a container and limits the read rate to
  1082  `1000` IO per second from `/dev/sda`:
  1083  
  1084      $ docker run -ti --device-read-iops /dev/sda:1000 ubuntu
  1085  
  1086  The `--device-write-iops` flag limits write rate (IO per second) to a device.
  1087  For example, this command creates a container and limits the write rate to
  1088  `1000` IO per second to `/dev/sda`:
  1089  
  1090      $ docker run -ti --device-write-iops /dev/sda:1000 ubuntu
  1091  
  1092  Both flags take limits in the `<device-path>:<limit>` format. Both read and
  1093  write rates must be a positive integer.
  1094  
  1095  ## Additional groups
  1096      --group-add: Add additional groups to run as
  1097  
  1098  By default, the docker container process runs with the supplementary groups looked
  1099  up for the specified user. If one wants to add more to that list of groups, then
  1100  one can use this flag:
  1101  
  1102      $ docker run --rm --group-add audio --group-add nogroup --group-add 777 busybox id
  1103      uid=0(root) gid=0(root) groups=10(wheel),29(audio),99(nogroup),777
  1104  
  1105  ## Runtime privilege and Linux capabilities
  1106  
  1107      --cap-add: Add Linux capabilities
  1108      --cap-drop: Drop Linux capabilities
  1109      --privileged=false: Give extended privileges to this container
  1110      --device=[]: Allows you to run devices inside the container without the --privileged flag.
  1111  
  1112  By default, Docker containers are "unprivileged" and cannot, for
  1113  example, run a Docker daemon inside a Docker container. This is because
  1114  by default a container is not allowed to access any devices, but a
  1115  "privileged" container is given access to all devices (see
  1116  the documentation on [cgroups devices](https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt)).
  1117  
  1118  When the operator executes `docker run --privileged`, Docker will enable
  1119  to access to all devices on the host as well as set some configuration
  1120  in AppArmor or SELinux to allow the container nearly all the same access to the
  1121  host as processes running outside containers on the host. Additional
  1122  information about running with `--privileged` is available on the
  1123  [Docker Blog](http://blog.docker.com/2013/09/docker-can-now-run-within-docker/).
  1124  
  1125  If you want to limit access to a specific device or devices you can use
  1126  the `--device` flag. It allows you to specify one or more devices that
  1127  will be accessible within the container.
  1128  
  1129      $ docker run --device=/dev/snd:/dev/snd ...
  1130  
  1131  By default, the container will be able to `read`, `write`, and `mknod` these devices.
  1132  This can be overridden using a third `:rwm` set of options to each `--device` flag:
  1133  
  1134      $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk  /dev/xvdc
  1135  
  1136      Command (m for help): q
  1137      $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk  /dev/xvdc
  1138      You will not be able to write the partition table.
  1139  
  1140      Command (m for help): q
  1141  
  1142      $ docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk  /dev/xvdc
  1143          crash....
  1144  
  1145      $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk  /dev/xvdc
  1146      fdisk: unable to open /dev/xvdc: Operation not permitted
  1147  
  1148  In addition to `--privileged`, the operator can have fine grain control over the
  1149  capabilities using `--cap-add` and `--cap-drop`. By default, Docker has a default
  1150  list of capabilities that are kept. The following table lists the Linux capability
  1151  options which are allowed by default and can be dropped.
  1152  
  1153  | Capability Key   | Capability Description                                                                                                        |
  1154  | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1155  | SETPCAP          | Modify process capabilities.                                                                                                  |
  1156  | MKNOD            | Create special files using mknod(2).                                                                                          |
  1157  | AUDIT_WRITE      | Write records to kernel auditing log.                                                                                         |
  1158  | CHOWN            | Make arbitrary changes to file UIDs and GIDs (see chown(2)).                                                                  |
  1159  | NET_RAW          | Use RAW and PACKET sockets.                                                                                                   |
  1160  | DAC_OVERRIDE     | Bypass file read, write, and execute permission checks.                                                                       |
  1161  | FOWNER           | Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. |
  1162  | FSETID           | Don't clear set-user-ID and set-group-ID permission bits when a file is modified.                                             |
  1163  | KILL             | Bypass permission checks for sending signals.                                                                                 |
  1164  | SETGID           | Make arbitrary manipulations of process GIDs and supplementary GID list.                                                      |
  1165  | SETUID           | Make arbitrary manipulations of process UIDs.                                                                                 |
  1166  | NET_BIND_SERVICE | Bind a socket to internet domain privileged ports (port numbers less than 1024).                                              |
  1167  | SYS_CHROOT       | Use chroot(2), change root directory.                                                                                         |
  1168  | SETFCAP          | Set file capabilities.                                                                                                        |
  1169  
  1170  The next table shows the capabilities which are not granted by default and may be added.
  1171  
  1172  | Capability Key   | Capability Description                                                                                                        |
  1173  | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1174  | SYS_MODULE       | Load and unload kernel modules.                                                                                               |
  1175  | SYS_RAWIO        | Perform I/O port operations (iopl(2) and ioperm(2)).                                                                          |
  1176  | SYS_PACCT        | Use acct(2), switch process accounting on or off.                                                                             |
  1177  | SYS_ADMIN        | Perform a range of system administration operations.                                                                          |
  1178  | SYS_NICE         | Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes.                         |
  1179  | SYS_RESOURCE     | Override resource Limits.                                                                                                     |
  1180  | SYS_TIME         | Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock.                                    |
  1181  | SYS_TTY_CONFIG   | Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals.                                           |
  1182  | AUDIT_CONTROL    | Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules.               |
  1183  | MAC_OVERRIDE     | Allow MAC configuration or state changes. Implemented for the Smack LSM.                                                      |
  1184  | MAC_ADMIN        | Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM).                               |
  1185  | NET_ADMIN        | Perform various network-related operations.                                                                                   |
  1186  | SYSLOG           | Perform privileged syslog(2) operations.                                                                                      |
  1187  | DAC_READ_SEARCH  | Bypass file read permission checks and directory read and execute permission checks.                                          |
  1188  | LINUX_IMMUTABLE  | Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags.                                                                        |
  1189  | NET_BROADCAST    | Make socket broadcasts, and listen to multicasts.                                                                             |
  1190  | IPC_LOCK         | Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)).                                                                      |
  1191  | IPC_OWNER        | Bypass permission checks for operations on System V IPC objects.                                                              |
  1192  | SYS_PTRACE       | Trace arbitrary processes using ptrace(2).                                                                                    |
  1193  | SYS_BOOT         | Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution.                                            |
  1194  | LEASE            | Establish leases on arbitrary files (see fcntl(2)).                                                                           |
  1195  | WAKE_ALARM       | Trigger something that will wake up the system.                                                                               |
  1196  | BLOCK_SUSPEND    | Employ features that can block system suspend.                                                                                |
  1197  
  1198  Further reference information is available on the [capabilities(7) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)
  1199  
  1200  Both flags support the value `ALL`, so if the
  1201  operator wants to have all capabilities but `MKNOD` they could use:
  1202  
  1203      $ docker run --cap-add=ALL --cap-drop=MKNOD ...
  1204  
  1205  For interacting with the network stack, instead of using `--privileged` they
  1206  should use `--cap-add=NET_ADMIN` to modify the network interfaces.
  1207  
  1208      $ docker run -it --rm  ubuntu:14.04 ip link add dummy0 type dummy
  1209      RTNETLINK answers: Operation not permitted
  1210      $ docker run -it --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add dummy0 type dummy
  1211  
  1212  To mount a FUSE based filesystem, you need to combine both `--cap-add` and
  1213  `--device`:
  1214  
  1215      $ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs sven@10.10.10.20:/home/sven /mnt
  1216      fuse: failed to open /dev/fuse: Operation not permitted
  1217      $ docker run --rm -it --device /dev/fuse sshfs sshfs sven@10.10.10.20:/home/sven /mnt
  1218      fusermount: mount failed: Operation not permitted
  1219      $ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
  1220      # sshfs sven@10.10.10.20:/home/sven /mnt
  1221      The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established.
  1222      ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6.
  1223      Are you sure you want to continue connecting (yes/no)? yes
  1224      sven@10.10.10.20's password:
  1225      root@30aa0cfaf1b5:/# ls -la /mnt/src/docker
  1226      total 1516
  1227      drwxrwxr-x 1 1000 1000   4096 Dec  4 06:08 .
  1228      drwxrwxr-x 1 1000 1000   4096 Dec  4 11:46 ..
  1229      -rw-rw-r-- 1 1000 1000     16 Oct  8 00:09 .dockerignore
  1230      -rwxrwxr-x 1 1000 1000    464 Oct  8 00:09 .drone.yml
  1231      drwxrwxr-x 1 1000 1000   4096 Dec  4 06:11 .git
  1232      -rw-rw-r-- 1 1000 1000    461 Dec  4 06:08 .gitignore
  1233      ....
  1234  
  1235  The default seccomp profile will adjust to the selected capabilities, in order to allow
  1236  use of facilities allowed by the capabilities, so you should not have to adjust this,
  1237  since Docker 1.12. In Docker 1.10 and 1.11 this did not happen and it may be necessary
  1238  to use a custom seccomp profile or use `--security-opt seccomp=unconfined` when adding
  1239  capabilities.
  1240  
  1241  ## Logging drivers (--log-driver)
  1242  
  1243  The container can have a different logging driver than the Docker daemon. Use
  1244  the `--log-driver=VALUE` with the `docker run` command to configure the
  1245  container's logging driver. The following options are supported:
  1246  
  1247  | Driver      | Description                                                                                                                   |
  1248  | ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
  1249  | `none`      | Disables any logging for the container. `docker logs` won't be available with this driver.                                    |
  1250  | `json-file` | Default logging driver for Docker. Writes JSON messages to file.  No logging options are supported for this driver.           |
  1251  | `syslog`    | Syslog logging driver for Docker. Writes log messages to syslog.                                                              |
  1252  | `journald`  | Journald logging driver for Docker. Writes log messages to `journald`.                                                        |
  1253  | `gelf`      | Graylog Extended Log Format (GELF) logging driver for Docker. Writes log messages to a GELF endpoint likeGraylog or Logstash. |
  1254  | `fluentd`   | Fluentd logging driver for Docker. Writes log messages to `fluentd` (forward input).                                          |
  1255  | `awslogs`   | Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs                               |
  1256  | `splunk`    | Splunk logging driver for Docker. Writes log messages to `splunk` using Event Http Collector.                                 |
  1257  
  1258  The `docker logs` command is available only for the `json-file` and `journald`
  1259  logging drivers.  For detailed information on working with logging drivers, see
  1260  [Configure a logging driver](https://docs.docker.com/engine/admin/logging/overview/).
  1261  
  1262  
  1263  ## Overriding Dockerfile image defaults
  1264  
  1265  When a developer builds an image from a [*Dockerfile*](builder.md)
  1266  or when she commits it, the developer can set a number of default parameters
  1267  that take effect when the image starts up as a container.
  1268  
  1269  Four of the Dockerfile commands cannot be overridden at runtime: `FROM`,
  1270  `MAINTAINER`, `RUN`, and `ADD`. Everything else has a corresponding override
  1271  in `docker run`. We'll go through what the developer might have set in each
  1272  Dockerfile instruction and how the operator can override that setting.
  1273  
  1274   - [CMD (Default Command or Options)](#cmd-default-command-or-options)
  1275   - [ENTRYPOINT (Default Command to Execute at Runtime)](
  1276      #entrypoint-default-command-to-execute-at-runtime)
  1277   - [EXPOSE (Incoming Ports)](#expose-incoming-ports)
  1278   - [ENV (Environment Variables)](#env-environment-variables)
  1279   - [HEALTHCHECK](#healthcheck)
  1280   - [VOLUME (Shared Filesystems)](#volume-shared-filesystems)
  1281   - [USER](#user)
  1282   - [WORKDIR](#workdir)
  1283  
  1284  ### CMD (default command or options)
  1285  
  1286  Recall the optional `COMMAND` in the Docker
  1287  commandline:
  1288  
  1289      $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  1290  
  1291  This command is optional because the person who created the `IMAGE` may
  1292  have already provided a default `COMMAND` using the Dockerfile `CMD`
  1293  instruction. As the operator (the person running a container from the
  1294  image), you can override that `CMD` instruction just by specifying a new
  1295  `COMMAND`.
  1296  
  1297  If the image also specifies an `ENTRYPOINT` then the `CMD` or `COMMAND`
  1298  get appended as arguments to the `ENTRYPOINT`.
  1299  
  1300  ### ENTRYPOINT (default command to execute at runtime)
  1301  
  1302      --entrypoint="": Overwrite the default entrypoint set by the image
  1303  
  1304  The `ENTRYPOINT` of an image is similar to a `COMMAND` because it
  1305  specifies what executable to run when the container starts, but it is
  1306  (purposely) more difficult to override. The `ENTRYPOINT` gives a
  1307  container its default nature or behavior, so that when you set an
  1308  `ENTRYPOINT` you can run the container *as if it were that binary*,
  1309  complete with default options, and you can pass in more options via the
  1310  `COMMAND`. But, sometimes an operator may want to run something else
  1311  inside the container, so you can override the default `ENTRYPOINT` at
  1312  runtime by using a string to specify the new `ENTRYPOINT`. Here is an
  1313  example of how to run a shell in a container that has been set up to
  1314  automatically run something else (like `/usr/bin/redis-server`):
  1315  
  1316      $ docker run -it --entrypoint /bin/bash example/redis
  1317  
  1318  or two examples of how to pass more parameters to that ENTRYPOINT:
  1319  
  1320      $ docker run -it --entrypoint /bin/bash example/redis -c ls -l
  1321      $ docker run -it --entrypoint /usr/bin/redis-cli example/redis --help
  1322  
  1323  You can reset a containers entrypoint by passing an empty string, for example:
  1324  
  1325      $ docker run -it --entrypoint="" mysql bash
  1326  
  1327  > **Note**: Passing `--entrypoint` will clear out any default command set on the
  1328  > image (i.e. any `CMD` instruction in the Dockerfile used to build it).
  1329  
  1330  ### EXPOSE (incoming ports)
  1331  
  1332  The following `run` command options work with container networking:
  1333  
  1334      --expose=[]: Expose a port or a range of ports inside the container.
  1335                   These are additional to those exposed by the `EXPOSE` instruction
  1336      -P         : Publish all exposed ports to the host interfaces
  1337      -p=[]      : Publish a container᾿s port or a range of ports to the host
  1338                     format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
  1339                     Both hostPort and containerPort can be specified as a
  1340                     range of ports. When specifying ranges for both, the
  1341                     number of container ports in the range must match the
  1342                     number of host ports in the range, for example:
  1343                         -p 1234-1236:1234-1236/tcp
  1344  
  1345                     When specifying a range for hostPort only, the
  1346                     containerPort must not be a range.  In this case the
  1347                     container port is published somewhere within the
  1348                     specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`)
  1349  
  1350                     (use 'docker port' to see the actual mapping)
  1351  
  1352      --link=""  : Add link to another container (<name or id>:alias or <name or id>)
  1353  
  1354  With the exception of the `EXPOSE` directive, an image developer hasn't
  1355  got much control over networking. The `EXPOSE` instruction defines the
  1356  initial incoming ports that provide services. These ports are available
  1357  to processes inside the container. An operator can use the `--expose`
  1358  option to add to the exposed ports.
  1359  
  1360  To expose a container's internal port, an operator can start the
  1361  container with the `-P` or `-p` flag. The exposed port is accessible on
  1362  the host and the ports are available to any client that can reach the
  1363  host.
  1364  
  1365  The `-P` option publishes all the ports to the host interfaces. Docker
  1366  binds each exposed port to a random port on the host. The range of
  1367  ports are within an *ephemeral port range* defined by
  1368  `/proc/sys/net/ipv4/ip_local_port_range`. Use the `-p` flag to
  1369  explicitly map a single port or range of ports.
  1370  
  1371  The port number inside the container (where the service listens) does
  1372  not need to match the port number exposed on the outside of the
  1373  container (where clients connect). For example, inside the container an
  1374  HTTP service is listening on port 80 (and so the image developer
  1375  specifies `EXPOSE 80` in the Dockerfile). At runtime, the port might be
  1376  bound to 42800 on the host. To find the mapping between the host ports
  1377  and the exposed ports, use `docker port`.
  1378  
  1379  If the operator uses `--link` when starting a new client container in the
  1380  default bridge network, then the client container can access the exposed
  1381  port via a private networking interface.
  1382  If `--link` is used when starting a container in a user-defined network as
  1383  described in [*Docker network overview*](https://docs.docker.com/engine/userguide/networking/),
  1384  it will provide a named alias for the container being linked to.
  1385  
  1386  ### ENV (environment variables)
  1387  
  1388  When a new container is created, Docker will set the following environment
  1389  variables automatically:
  1390  
  1391  | Variable | Value |
  1392  | -------- | ----- |
  1393  | `HOME` | Set based on the value of `USER` |
  1394  | `HOSTNAME` | The hostname associated with the container |
  1395  | `PATH` | Includes popular directories, such as `:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin` |
  1396  | `TERM` | `xterm` if the container is allocated a pseudo-TTY |
  1397  
  1398  Additionally, the operator can **set any environment variable** in the
  1399  container by using one or more `-e` flags, even overriding those mentioned
  1400  above, or already defined by the developer with a Dockerfile `ENV`:
  1401  
  1402      $ docker run -e "deep=purple" --rm ubuntu /bin/bash -c export
  1403      declare -x HOME="/"
  1404      declare -x HOSTNAME="85bc26a0e200"
  1405      declare -x OLDPWD
  1406      declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  1407      declare -x PWD="/"
  1408      declare -x SHLVL="1"
  1409      declare -x deep="purple"
  1410  
  1411  Similarly the operator can set the **hostname** with `-h`.
  1412  
  1413  ### HEALTHCHECK
  1414  
  1415  ```
  1416    --health-cmd            Command to run to check health
  1417    --health-interval       Time between running the check
  1418    --health-retries        Consecutive failures needed to report unhealthy
  1419    --health-timeout        Maximum time to allow one check to run
  1420    --no-healthcheck        Disable any container-specified HEALTHCHECK
  1421  ```
  1422  
  1423  Example:
  1424  
  1425      {% raw %}
  1426      $ docker run --name=test -d \
  1427          --health-cmd='stat /etc/passwd || exit 1' \
  1428          --health-interval=2s \
  1429          busybox sleep 1d
  1430      $ sleep 2; docker inspect --format='{{.State.Health.Status}}' test
  1431      healthy
  1432      $ docker exec test rm /etc/passwd
  1433      $ sleep 2; docker inspect --format='{{json .State.Health}}' test
  1434      {
  1435        "Status": "unhealthy",
  1436        "FailingStreak": 3,
  1437        "Log": [
  1438          {
  1439            "Start": "2016-05-25T17:22:04.635478668Z",
  1440            "End": "2016-05-25T17:22:04.7272552Z",
  1441            "ExitCode": 0,
  1442            "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..."
  1443          },
  1444          {
  1445            "Start": "2016-05-25T17:22:06.732900633Z",
  1446            "End": "2016-05-25T17:22:06.822168935Z",
  1447            "ExitCode": 0,
  1448            "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..."
  1449          },
  1450          {
  1451            "Start": "2016-05-25T17:22:08.823956535Z",
  1452            "End": "2016-05-25T17:22:08.897359124Z",
  1453            "ExitCode": 1,
  1454            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1455          },
  1456          {
  1457            "Start": "2016-05-25T17:22:10.898802931Z",
  1458            "End": "2016-05-25T17:22:10.969631866Z",
  1459            "ExitCode": 1,
  1460            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1461          },
  1462          {
  1463            "Start": "2016-05-25T17:22:12.971033523Z",
  1464            "End": "2016-05-25T17:22:13.082015516Z",
  1465            "ExitCode": 1,
  1466            "Output": "stat: can't stat '/etc/passwd': No such file or directory\n"
  1467          }
  1468        ]
  1469      }
  1470      {% endraw %}
  1471  
  1472  The health status is also displayed in the `docker ps` output.
  1473  
  1474  ### TMPFS (mount tmpfs filesystems)
  1475  
  1476  ```bash
  1477  --tmpfs=[]: Create a tmpfs mount with: container-dir[:<options>],
  1478              where the options are identical to the Linux
  1479              'mount -t tmpfs -o' command.
  1480  ```
  1481  
  1482  The example below mounts an empty tmpfs into the container with the `rw`,
  1483  `noexec`, `nosuid`, and `size=65536k` options.
  1484  
  1485      $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
  1486  
  1487  ### VOLUME (shared filesystems)
  1488  
  1489      -v, --volume=[host-src:]container-dest[:<options>]: Bind mount a volume.
  1490      The comma-delimited `options` are [rw|ro], [z|Z],
  1491      [[r]shared|[r]slave|[r]private], and [nocopy].
  1492      The 'host-src' is an absolute path or a name value.
  1493  
  1494      If neither 'rw' or 'ro' is specified then the volume is mounted in
  1495      read-write mode.
  1496  
  1497      The `nocopy` modes is used to disable automatic copying requested volume
  1498      path in the container to the volume storage location.
  1499      For named volumes, `copy` is the default mode. Copy modes are not supported
  1500      for bind-mounted volumes.
  1501  
  1502      --volumes-from="": Mount all volumes from the given container(s)
  1503  
  1504  > **Note**:
  1505  > When using systemd to manage the Docker daemon's start and stop, in the systemd
  1506  > unit file there is an option to control mount propagation for the Docker daemon
  1507  > itself, called `MountFlags`. The value of this setting may cause Docker to not
  1508  > see mount propagation changes made on the mount point. For example, if this value
  1509  > is `slave`, you may not be able to use the `shared` or `rshared` propagation on
  1510  > a volume.
  1511  
  1512  The volumes commands are complex enough to have their own documentation
  1513  in section [*Manage data in
  1514  containers*](https://docs.docker.com/engine/tutorials/dockervolumes/). A developer can define
  1515  one or more `VOLUME`'s associated with an image, but only the operator
  1516  can give access from one container to another (or from a container to a
  1517  volume mounted on the host).
  1518  
  1519  The `container-dest` must always be an absolute path such as `/src/docs`.
  1520  The `host-src` can either be an absolute path or a `name` value. If you
  1521  supply an absolute path for the `host-dir`, Docker bind-mounts to the path
  1522  you specify. If you supply a `name`, Docker creates a named volume by that `name`.
  1523  
  1524  A `name` value must start with an alphanumeric character,
  1525  followed by `a-z0-9`, `_` (underscore), `.` (period) or `-` (hyphen).
  1526  An absolute path starts with a `/` (forward slash).
  1527  
  1528  For example, you can specify either `/foo` or `foo` for a `host-src` value.
  1529  If you supply the `/foo` value, Docker creates a bind-mount. If you supply
  1530  the `foo` specification, Docker creates a named volume.
  1531  
  1532  ### USER
  1533  
  1534  `root` (id = 0) is the default user within a container. The image developer can
  1535  create additional users. Those users are accessible by name.  When passing a numeric
  1536  ID, the user does not have to exist in the container.
  1537  
  1538  The developer can set a default user to run the first process with the
  1539  Dockerfile `USER` instruction. When starting a container, the operator can override
  1540  the `USER` instruction by passing the `-u` option.
  1541  
  1542      -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.
  1543  
  1544      The followings examples are all valid:
  1545      --user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]
  1546  
  1547  > **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647.
  1548  
  1549  ### WORKDIR
  1550  
  1551  The default working directory for running binaries within a container is the
  1552  root directory (`/`), but the developer can set a different default with the
  1553  Dockerfile `WORKDIR` command. The operator can override this with:
  1554  
  1555      -w="": Working directory inside the container