github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/docs/reference/commandline/run.md (about)

     1  ---
     2  title: "run"
     3  description: "The run command description and usage"
     4  keywords: "run, command, container"
     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  # run
    17  
    18  ```markdown
    19  Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    20  
    21  Run a command in a new container
    22  
    23  Options:
    24        --add-host value              Add a custom host-to-IP mapping (host:ip) (default [])
    25    -a, --attach value                Attach to STDIN, STDOUT or STDERR (default [])
    26        --blkio-weight value          Block IO (relative weight), between 10 and 1000
    27        --blkio-weight-device value   Block IO weight (relative device weight) (default [])
    28        --cap-add value               Add Linux capabilities (default [])
    29        --cap-drop value              Drop Linux capabilities (default [])
    30        --cgroup-parent string        Optional parent cgroup for the container
    31        --cidfile string              Write the container ID to the file
    32        --cpu-count int               The number of CPUs available for execution by the container.
    33                                      Windows daemon only. On Windows Server containers, this is
    34                                      approximated as a percentage of total CPU usage.
    35        --cpu-percent int             Limit percentage of CPU available for execution
    36                                      by the container. Windows daemon only.
    37                                      The processor resource controls are mutually
    38                                      exclusive, the order of precedence is CPUCount
    39                                      first, then CPUShares, and CPUPercent last.
    40        --cpu-period int              Limit CPU CFS (Completely Fair Scheduler) period
    41        --cpu-quota int               Limit CPU CFS (Completely Fair Scheduler) quota
    42    -c, --cpu-shares int              CPU shares (relative weight)
    43        --cpus NanoCPUs               Number of CPUs (default 0.000)
    44        --cpu-rt-period int           Limit the CPU real-time period in microseconds
    45        --cpu-rt-runtime int          Limit the CPU real-time runtime in microseconds
    46        --cpuset-cpus string          CPUs in which to allow execution (0-3, 0,1)
    47        --cpuset-mems string          MEMs in which to allow execution (0-3, 0,1)
    48    -d, --detach                      Run container in background and print container ID
    49        --detach-keys string          Override the key sequence for detaching a container
    50        --device value                Add a host device to the container (default [])
    51        --device-cgroup-rule value    Add a rule to the cgroup allowed devices list
    52        --device-read-bps value       Limit read rate (bytes per second) from a device (default [])
    53        --device-read-iops value      Limit read rate (IO per second) from a device (default [])
    54        --device-write-bps value      Limit write rate (bytes per second) to a device (default [])
    55        --device-write-iops value     Limit write rate (IO per second) to a device (default [])
    56        --disable-content-trust       Skip image verification (default true)
    57        --dns value                   Set custom DNS servers (default [])
    58        --dns-option value            Set DNS options (default [])
    59        --dns-search value            Set custom DNS search domains (default [])
    60        --entrypoint string           Overwrite the default ENTRYPOINT of the image
    61    -e, --env value                   Set environment variables (default [])
    62        --env-file value              Read in a file of environment variables (default [])
    63        --expose value                Expose a port or a range of ports (default [])
    64        --group-add value             Add additional groups to join (default [])
    65        --health-cmd string           Command to run to check health
    66        --health-interval duration    Time between running the check (ns|us|ms|s|m|h) (default 0s)
    67        --health-retries int          Consecutive failures needed to report unhealthy
    68        --health-timeout duration     Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s)
    69        --help                        Print usage
    70    -h, --hostname string             Container host name
    71        --init                        Run an init inside the container that forwards signals and reaps processes
    72        --init-path string            Path to the docker-init binary
    73    -i, --interactive                 Keep STDIN open even if not attached
    74        --io-maxbandwidth string      Maximum IO bandwidth limit for the system drive (Windows only)
    75                                      (Windows only). The format is `<number><unit>`.
    76                                      Unit is optional and can be `b` (bytes per second),
    77                                      `k` (kilobytes per second), `m` (megabytes per second),
    78                                      or `g` (gigabytes per second). If you omit the unit,
    79                                      the system uses bytes per second.
    80                                      --io-maxbandwidth and --io-maxiops are mutually exclusive options.
    81        --io-maxiops uint             Maximum IOps limit for the system drive (Windows only)
    82        --ip string                   IPv4 address (e.g., 172.30.100.104)
    83        --ip6 string                  IPv6 address (e.g., 2001:db8::33)
    84        --ipc string                  IPC namespace to use
    85        --isolation string            Container isolation technology
    86        --kernel-memory string        Kernel memory limit
    87    -l, --label value                 Set meta data on a container (default [])
    88        --label-file value            Read in a line delimited file of labels (default [])
    89        --link value                  Add link to another container (default [])
    90        --link-local-ip value         Container IPv4/IPv6 link-local addresses (default [])
    91        --log-driver string           Logging driver for the container
    92        --log-opt value               Log driver options (default [])
    93        --mac-address string          Container MAC address (e.g., 92:d0:c6:0a:29:33)
    94    -m, --memory string               Memory limit
    95        --memory-reservation string   Memory soft limit
    96        --memory-swap string          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
    97        --memory-swappiness int       Tune container memory swappiness (0 to 100) (default -1)
    98        --name string                 Assign a name to the container
    99        --network-alias value         Add network-scoped alias for the container (default [])
   100        --network string              Connect a container to a network
   101                                      'bridge': create a network stack on the default Docker bridge
   102                                      'none': no networking
   103                                      'container:<name|id>': reuse another container's network stack
   104                                      'host': use the Docker host network stack
   105                                      '<network-name>|<network-id>': connect to a user-defined network
   106        --no-healthcheck              Disable any container-specified HEALTHCHECK
   107        --oom-kill-disable            Disable OOM Killer
   108        --oom-score-adj int           Tune host's OOM preferences (-1000 to 1000)
   109        --pid string                  PID namespace to use
   110        --pids-limit int              Tune container pids limit (set -1 for unlimited)
   111        --privileged                  Give extended privileges to this container
   112    -p, --publish value               Publish a container's port(s) to the host (default [])
   113    -P, --publish-all                 Publish all exposed ports to random ports
   114        --read-only                   Mount the container's root filesystem as read only
   115        --restart string              Restart policy to apply when a container exits (default "no")
   116                                      Possible values are : no, on-failure[:max-retry], always, unless-stopped
   117        --rm                          Automatically remove the container when it exits
   118        --runtime string              Runtime to use for this container
   119        --security-opt value          Security Options (default [])
   120        --shm-size bytes              Size of /dev/shm
   121                                      The format is `<number><unit>`. `number` must be greater than `0`.
   122                                      Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes),
   123                                      or `g` (gigabytes). If you omit the unit, the system uses bytes.
   124        --sig-proxy                   Proxy received signals to the process (default true)
   125        --stop-signal string          Signal to stop a container, SIGTERM by default (default "SIGTERM")
   126        --stop-timeout=10             Timeout (in seconds) to stop a container
   127        --storage-opt value           Storage driver options for the container (default [])
   128        --sysctl value                Sysctl options (default map[])
   129        --tmpfs value                 Mount a tmpfs directory (default [])
   130    -t, --tty                         Allocate a pseudo-TTY
   131        --ulimit value                Ulimit options (default [])
   132    -u, --user string                 Username or UID (format: <name|uid>[:<group|gid>])
   133        --userns string               User namespace to use
   134                                      'host': Use the Docker host user namespace
   135                                      '': Use the Docker daemon user namespace specified by `--userns-remap` option.
   136        --uts string                  UTS namespace to use
   137    -v, --volume value                Bind mount a volume (default []). The format
   138                                      is `[host-src:]container-dest[:<options>]`.
   139                                      The comma-delimited `options` are [rw|ro],
   140                                      [z|Z], [[r]shared|[r]slave|[r]private], and
   141                                      [nocopy]. The 'host-src' is an absolute path
   142                                      or a name value.
   143        --volume-driver string        Optional volume driver for the container
   144        --volumes-from value          Mount volumes from the specified container(s) (default [])
   145    -w, --workdir string              Working directory inside the container
   146  ```
   147  
   148  ## Descriptino
   149  
   150  The `docker run` command first `creates` a writeable container layer over the
   151  specified image, and then `starts` it using the specified command. That is,
   152  `docker run` is equivalent to the API `/containers/create` then
   153  `/containers/(id)/start`. A stopped container can be restarted with all its
   154  previous changes intact using `docker start`. See `docker ps -a` to view a list
   155  of all containers.
   156  
   157  The `docker run` command can be used in combination with `docker commit` to
   158  [*change the command that a container runs*](commit.md). There is additional detailed information about `docker run` in the [Docker run reference](../run.md).
   159  
   160  For information on connecting a container to a network, see the ["*Docker network overview*"](https://docs.docker.com/engine/userguide/networking/).
   161  
   162  ## Examples
   163  
   164  ### Assign name and allocate pseudo-TTY (--name, -it)
   165  
   166  ```bash
   167  $ docker run --name test -it debian
   168  
   169  root@d6c0fe130dba:/# exit 13
   170  $ echo $?
   171  13
   172  $ docker ps -a | grep test
   173  d6c0fe130dba        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test
   174  ```
   175  
   176  This example runs a container named `test` using the `debian:latest`
   177  image. The `-it` instructs Docker to allocate a pseudo-TTY connected to
   178  the container's stdin; creating an interactive `bash` shell in the container.
   179  In the example, the `bash` shell is quit by entering
   180  `exit 13`. This exit code is passed on to the caller of
   181  `docker run`, and is recorded in the `test` container's metadata.
   182  
   183  ### Capture container ID (--cidfile)
   184  
   185  ```bash
   186  $ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
   187  ```
   188  
   189  This will create a container and print `test` to the console. The `cidfile`
   190  flag makes Docker attempt to create a new file and write the container ID to it.
   191  If the file exists already, Docker will return an error. Docker will close this
   192  file when `docker run` exits.
   193  
   194  ### Full container capabilities (--privileged)
   195  
   196  ```bash
   197  $ docker run -t -i --rm ubuntu bash
   198  root@bc338942ef20:/# mount -t tmpfs none /mnt
   199  mount: permission denied
   200  ```
   201  
   202  This will *not* work, because by default, most potentially dangerous kernel
   203  capabilities are dropped; including `cap_sys_admin` (which is required to mount
   204  filesystems). However, the `--privileged` flag will allow it to run:
   205  
   206  ```bash
   207  $ docker run -t -i --privileged ubuntu bash
   208  root@50e3f57e16e6:/# mount -t tmpfs none /mnt
   209  root@50e3f57e16e6:/# df -h
   210  Filesystem      Size  Used Avail Use% Mounted on
   211  none            1.9G     0  1.9G   0% /mnt
   212  ```
   213  
   214  The `--privileged` flag gives *all* capabilities to the container, and it also
   215  lifts all the limitations enforced by the `device` cgroup controller. In other
   216  words, the container can then do almost everything that the host can do. This
   217  flag exists to allow special use-cases, like running Docker within Docker.
   218  
   219  ### Set working directory (-w)
   220  
   221  ```bash
   222  $ docker  run -w /path/to/dir/ -i -t  ubuntu pwd
   223  ```
   224  
   225  The `-w` lets the command being executed inside directory given, here
   226  `/path/to/dir/`. If the path does not exist it is created inside the container.
   227  
   228  ### Set storage driver options per container
   229  
   230  ```bash
   231  $ docker run -it --storage-opt size=120G fedora /bin/bash
   232  ```
   233  
   234  This (size) will allow to set the container rootfs size to 120G at creation time.
   235  This option is only available for the `devicemapper`, `btrfs`, `overlay2`,
   236  `windowsfilter` and `zfs` graph drivers.
   237  For the `devicemapper`, `btrfs`, `windowsfilter` and `zfs` graph drivers,
   238  user cannot pass a size less than the Default BaseFS Size.
   239  For the `overlay2` storage driver, the size option is only available if the
   240  backing fs is `xfs` and mounted with the `pquota` mount option.
   241  Under these conditions, user can pass any size less then the backing fs size.
   242  
   243  ### Mount tmpfs (--tmpfs)
   244  
   245  ```bash
   246  $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
   247  ```
   248  
   249  The `--tmpfs` flag mounts an empty tmpfs into the container with the `rw`,
   250  `noexec`, `nosuid`, `size=65536k` options.
   251  
   252  ### Mount volume (-v, --read-only)
   253  
   254  ```bash
   255  $ docker  run  -v `pwd`:`pwd` -w `pwd` -i -t  ubuntu pwd
   256  ```
   257  
   258  The `-v` flag mounts the current working directory into the container. The `-w`
   259  lets the command being executed inside the current working directory, by
   260  changing into the directory to the value returned by `pwd`. So this
   261  combination executes the command using the container, but inside the
   262  current working directory.
   263  
   264  ```bash
   265  $ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
   266  ```
   267  
   268  When the host directory of a bind-mounted volume doesn't exist, Docker
   269  will automatically create this directory on the host for you. In the
   270  example above, Docker will create the `/doesnt/exist`
   271  folder before starting your container.
   272  
   273  ```bash
   274  $ docker run --read-only -v /icanwrite busybox touch /icanwrite/here
   275  ```
   276  
   277  Volumes can be used in combination with `--read-only` to control where
   278  a container writes files. The `--read-only` flag mounts the container's root
   279  filesystem as read only prohibiting writes to locations other than the
   280  specified volumes for the container.
   281  
   282  ```bash
   283  $ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
   284  ```
   285  
   286  By bind-mounting the docker unix socket and statically linked docker
   287  binary (refer to [get the linux binary](
   288  https://docs.docker.com/engine/installation/binaries/#/get-the-linux-binary)),
   289  you give the container the full access to create and manipulate the host's
   290  Docker daemon.
   291  
   292  On Windows, the paths must be specified using Windows-style semantics.
   293  
   294  ```powershell
   295  PS C:\> docker run -v c:\foo:c:\dest microsoft/nanoserver cmd /s /c type c:\dest\somefile.txt
   296  Contents of file
   297  
   298  PS C:\> docker run -v c:\foo:d: microsoft/nanoserver cmd /s /c type d:\somefile.txt
   299  Contents of file
   300  ```
   301  
   302  The following examples will fail when using Windows-based containers, as the
   303  destination of a volume or bind-mount inside the container must be one of:
   304  a non-existing or empty directory; or a drive other than C:. Further, the source
   305  of a bind mount must be a local directory, not a file.
   306  
   307  ```powershell
   308  net use z: \\remotemachine\share
   309  docker run -v z:\foo:c:\dest ...
   310  docker run -v \\uncpath\to\directory:c:\dest ...
   311  docker run -v c:\foo\somefile.txt:c:\dest ...
   312  docker run -v c:\foo:c: ...
   313  docker run -v c:\foo:c:\existing-directory-with-contents ...
   314  ```
   315  
   316  For in-depth information about volumes, refer to [manage data in containers](https://docs.docker.com/engine/tutorials/dockervolumes/)
   317  
   318  ### Publish or expose port (-p, --expose)
   319  
   320  ```bash
   321  $ docker run -p 127.0.0.1:80:8080 ubuntu bash
   322  ```
   323  
   324  This binds port `8080` of the container to port `80` on `127.0.0.1` of the host
   325  machine. The [Docker User
   326  Guide](https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/)
   327  explains in detail how to manipulate ports in Docker.
   328  
   329  ```bash
   330  $ docker run --expose 80 ubuntu bash
   331  ```
   332  
   333  This exposes port `80` of the container without publishing the port to the host
   334  system's interfaces.
   335  
   336  ### Set environment variables (-e, --env, --env-file)
   337  
   338  ```bash
   339  $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
   340  ```
   341  
   342  This sets simple (non-array) environmental variables in the container. For
   343  illustration all three
   344  flags are shown here. Where `-e`, `--env` take an environment variable and
   345  value, or if no `=` is provided, then that variable's current value, set via
   346  `export`, is passed through (i.e. `$MYVAR1` from the host is set to `$MYVAR1`
   347  in the container). When no `=` is provided and that variable is not defined
   348  in the client's environment then that variable will be removed from the
   349  container's list of environment variables. All three flags, `-e`, `--env` and
   350  `--env-file` can be repeated.
   351  
   352  Regardless of the order of these three flags, the `--env-file` are processed
   353  first, and then `-e`, `--env` flags. This way, the `-e` or `--env` will
   354  override variables as needed.
   355  
   356  ```bash
   357  $ cat ./env.list
   358  TEST_FOO=BAR
   359  $ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO
   360  TEST_FOO=This is a test
   361  ```
   362  
   363  The `--env-file` flag takes a filename as an argument and expects each line
   364  to be in the `VAR=VAL` format, mimicking the argument passed to `--env`. Comment
   365  lines need only be prefixed with `#`
   366  
   367  An example of a file passed with `--env-file`
   368  
   369  ```bash
   370  $ cat ./env.list
   371  TEST_FOO=BAR
   372  
   373  # this is a comment
   374  TEST_APP_DEST_HOST=10.10.0.127
   375  TEST_APP_DEST_PORT=8888
   376  _TEST_BAR=FOO
   377  TEST_APP_42=magic
   378  helloWorld=true
   379  123qwe=bar
   380  org.spring.config=something
   381  
   382  # pass through this variable from the caller
   383  TEST_PASSTHROUGH
   384  $ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env
   385  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
   386  HOSTNAME=5198e0745561
   387  TEST_FOO=BAR
   388  TEST_APP_DEST_HOST=10.10.0.127
   389  TEST_APP_DEST_PORT=8888
   390  _TEST_BAR=FOO
   391  TEST_APP_42=magic
   392  helloWorld=true
   393  TEST_PASSTHROUGH=howdy
   394  HOME=/root
   395  123qwe=bar
   396  org.spring.config=something
   397  
   398  $ docker run --env-file ./env.list busybox env
   399  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
   400  HOSTNAME=5198e0745561
   401  TEST_FOO=BAR
   402  TEST_APP_DEST_HOST=10.10.0.127
   403  TEST_APP_DEST_PORT=8888
   404  _TEST_BAR=FOO
   405  TEST_APP_42=magic
   406  helloWorld=true
   407  TEST_PASSTHROUGH=
   408  HOME=/root
   409  123qwe=bar
   410  org.spring.config=something
   411  ```
   412  
   413  ### Set metadata on container (-l, --label, --label-file)
   414  
   415  A label is a `key=value` pair that applies metadata to a container. To label a container with two labels:
   416  
   417  ```bash
   418  $ docker run -l my-label --label com.example.foo=bar ubuntu bash
   419  ```
   420  
   421  The `my-label` key doesn't specify a value so the label defaults to an empty
   422  string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`).
   423  
   424  The `key=value` must be unique to avoid overwriting the label value. If you
   425  specify labels with identical keys but different values, each subsequent value
   426  overwrites the previous. Docker uses the last `key=value` you supply.
   427  
   428  Use the `--label-file` flag to load multiple labels from a file. Delimit each
   429  label in the file with an EOL mark. The example below loads labels from a
   430  labels file in the current directory:
   431  
   432  ```bash
   433  $ docker run --label-file ./labels ubuntu bash
   434  ```
   435  
   436  The label-file format is similar to the format for loading environment
   437  variables. (Unlike environment variables, labels are not visible to processes
   438  running inside a container.) The following example illustrates a label-file
   439  format:
   440  
   441  ```none
   442  com.example.label1="a label"
   443  
   444  # this is a comment
   445  com.example.label2=another\ label
   446  com.example.label3
   447  ```
   448  
   449  You can load multiple label-files by supplying multiple  `--label-file` flags.
   450  
   451  For additional information on working with labels, see [*Labels - custom
   452  metadata in Docker*](https://docs.docker.com/engine/userguide/labels-custom-metadata/) in the Docker User
   453  Guide.
   454  
   455  ### Connect a container to a network (--network)
   456  
   457  When you start a container use the `--network` flag to connect it to a network.
   458  This adds the `busybox` container to the `my-net` network.
   459  
   460  ```bash
   461  $ docker run -itd --network=my-net busybox
   462  ```
   463  
   464  You can also choose the IP addresses for the container with `--ip` and `--ip6`
   465  flags when you start the container on a user-defined network.
   466  
   467  ```bash
   468  $ docker run -itd --network=my-net --ip=10.10.9.75 busybox
   469  ```
   470  
   471  If you want to add a running container to a network use the `docker network connect` subcommand.
   472  
   473  You can connect multiple containers to the same network. Once connected, the
   474  containers can communicate easily need only another container's IP address
   475  or name. For `overlay` networks or custom plugins that support multi-host
   476  connectivity, containers connected to the same multi-host network but launched
   477  from different Engines can also communicate in this way.
   478  
   479  > **Note**: Service discovery is unavailable on the default bridge network.
   480  > Containers can communicate via their IP addresses by default. To communicate
   481  > by name, they must be linked.
   482  
   483  You can disconnect a container from a network using the `docker network
   484  disconnect` command.
   485  
   486  ### Mount volumes from container (--volumes-from)
   487  
   488  ```bash
   489  $ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
   490  ```
   491  
   492  The `--volumes-from` flag mounts all the defined volumes from the referenced
   493  containers. Containers can be specified by repetitions of the `--volumes-from`
   494  argument. The container ID may be optionally suffixed with `:ro` or `:rw` to
   495  mount the volumes in read-only or read-write mode, respectively. By default,
   496  the volumes are mounted in the same mode (read write or read only) as
   497  the reference container.
   498  
   499  Labeling systems like SELinux require that proper labels are placed on volume
   500  content mounted into a container. Without a label, the security system might
   501  prevent the processes running inside the container from using the content. By
   502  default, Docker does not change the labels set by the OS.
   503  
   504  To change the label in the container context, you can add either of two suffixes
   505  `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file
   506  objects on the shared volumes. The `z` option tells Docker that two containers
   507  share the volume content. As a result, Docker labels the content with a shared
   508  content label. Shared volume labels allow all containers to read/write content.
   509  The `Z` option tells Docker to label the content with a private unshared label.
   510  Only the current container can use a private volume.
   511  
   512  ### Attach to STDIN/STDOUT/STDERR (-a)
   513  
   514  The `-a` flag tells `docker run` to bind to the container's `STDIN`, `STDOUT`
   515  or `STDERR`. This makes it possible to manipulate the output and input as
   516  needed.
   517  
   518  ```bash
   519  $ echo "test" | docker run -i -a stdin ubuntu cat -
   520  ```
   521  
   522  This pipes data into a container and prints the container's ID by attaching
   523  only to the container's `STDIN`.
   524  
   525  ```bash
   526  $ docker run -a stderr ubuntu echo test
   527  ```
   528  
   529  This isn't going to print anything unless there's an error because we've
   530  only attached to the `STDERR` of the container. The container's logs
   531  still store what's been written to `STDERR` and `STDOUT`.
   532  
   533  ```bash
   534  $ cat somefile | docker run -i -a stdin mybuilder dobuild
   535  ```
   536  
   537  This is how piping a file into a container could be done for a build.
   538  The container's ID will be printed after the build is done and the build
   539  logs could be retrieved using `docker logs`. This is
   540  useful if you need to pipe a file or something else into a container and
   541  retrieve the container's ID once the container has finished running.
   542  
   543  ### Add host device to container (--device)
   544  
   545  ```bash
   546  {% raw %}
   547  $ docker run --device=/dev/sdc:/dev/xvdc \
   548               --device=/dev/sdd --device=/dev/zero:/dev/nulo \
   549               -i -t \
   550               ubuntu ls -l /dev/{xvdc,sdd,nulo}
   551  
   552  brw-rw---- 1 root disk 8, 2 Feb  9 16:05 /dev/xvdc
   553  brw-rw---- 1 root disk 8, 3 Feb  9 16:05 /dev/sdd
   554  crw-rw-rw- 1 root root 1, 5 Feb  9 16:05 /dev/nulo
   555  {% endraw %}
   556  ```
   557  
   558  It is often necessary to directly expose devices to a container. The `--device`
   559  option enables that. For example, a specific block storage device or loop
   560  device or audio device can be added to an otherwise unprivileged container
   561  (without the `--privileged` flag) and have the application directly access it.
   562  
   563  By default, the container will be able to `read`, `write` and `mknod` these devices.
   564  This can be overridden using a third `:rwm` set of options to each `--device`
   565  flag:
   566  
   567  ```bash
   568  $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk  /dev/xvdc
   569  
   570  Command (m for help): q
   571  $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk  /dev/xvdc
   572  You will not be able to write the partition table.
   573  
   574  Command (m for help): q
   575  
   576  $ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk  /dev/xvdc
   577  
   578  Command (m for help): q
   579  
   580  $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk  /dev/xvdc
   581  fdisk: unable to open /dev/xvdc: Operation not permitted
   582  ```
   583  
   584  > **Note**: `--device` cannot be safely used with ephemeral devices. Block devices
   585  > that may be removed should not be added to untrusted containers with
   586  > `--device`.
   587  
   588  ### Restart policies (--restart)
   589  
   590  Use Docker's `--restart` to specify a container's *restart policy*. A restart
   591  policy controls whether the Docker daemon restarts a container after exit.
   592  Docker supports the following restart policies:
   593  
   594  | Policy            | Result                                  |
   595  |-------------------|-----------------------------------------|
   596  | `no`              | Do not automatically restart the container when it exits. This is the default. |
   597  | `failure`         | Restart only if the container exits with a non-zero exit status. Optionally, limit the number of restart retries the Docker daemon attempts. |
   598  | `always`          | Always restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container. |
   599  
   600  ```bash
   601  $ docker run --restart=always redis
   602  ```
   603  
   604  This will run the `redis` container with a restart policy of **always**
   605  so that if the container exits, Docker will restart it.
   606  
   607  More detailed information on restart policies can be found in the
   608  [Restart Policies (--restart)](../run.md#restart-policies-restart)
   609  section of the Docker run reference page.
   610  
   611  ### Add entries to container hosts file (--add-host)
   612  
   613  You can add other hosts into a container's `/etc/hosts` file by using one or
   614  more `--add-host` flags. This example adds a static address for a host named
   615  `docker`:
   616  
   617  ```bash
   618  $ docker run --add-host=docker:10.180.0.1 --rm -it debian
   619  
   620  root@f38c87f2a42d:/# ping docker
   621  PING docker (10.180.0.1): 48 data bytes
   622  56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
   623  56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
   624  ^C--- docker ping statistics ---
   625  2 packets transmitted, 2 packets received, 0% packet loss
   626  round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
   627  ```
   628  
   629  Sometimes you need to connect to the Docker host from within your
   630  container. To enable this, pass the Docker host's IP address to
   631  the container using the `--add-host` flag. To find the host's address,
   632  use the `ip addr show` command.
   633  
   634  The flags you pass to `ip addr show` depend on whether you are
   635  using IPv4 or IPv6 networking in your containers. Use the following
   636  flags for IPv4 address retrieval for a network device named `eth0`:
   637  
   638  ```bash
   639  {% raw %}
   640  $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1`
   641  $ docker run  --add-host=docker:${HOSTIP} --rm -it debian
   642  {% endraw %}
   643  ```
   644  
   645  For IPv6 use the `-6` flag instead of the `-4` flag. For other network
   646  devices, replace `eth0` with the correct device name (for example `docker0`
   647  for the bridge device).
   648  
   649  ### Set ulimits in container (--ulimit)
   650  
   651  Since setting `ulimit` settings in a container requires extra privileges not
   652  available in the default container, you can set these using the `--ulimit` flag.
   653  `--ulimit` is specified with a soft and hard limit as such:
   654  `<type>=<soft limit>[:<hard limit>]`, for example:
   655  
   656  ```bash
   657  $ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n"
   658  1024
   659  ```
   660  
   661  > **Note**: If you do not provide a `hard limit`, the `soft limit` will be used
   662  > for both values. If no `ulimits` are set, they will be inherited from
   663  > the default `ulimits` set on the daemon.  `as` option is disabled now.
   664  > In other words, the following script is not supported:
   665  >
   666  > ```bash
   667  > $ docker run -it --ulimit as=1024 fedora /bin/bash`
   668  > ```
   669  
   670  The values are sent to the appropriate `syscall` as they are set.
   671  Docker doesn't perform any byte conversion. Take this into account when setting the values.
   672  
   673  #### For `nproc` usage
   674  
   675  Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to set the
   676  maximum number of processes available to a user, not to a container.  For example, start four
   677  containers with `daemon` user:
   678  
   679  ```bash
   680  $ docker run -d -u daemon --ulimit nproc=3 busybox top
   681  
   682  $ docker run -d -u daemon --ulimit nproc=3 busybox top
   683  
   684  $ docker run -d -u daemon --ulimit nproc=3 busybox top
   685  
   686  $ docker run -d -u daemon --ulimit nproc=3 busybox top
   687  ```
   688  
   689  The 4th container fails and reports "[8] System error: resource temporarily unavailable" error.
   690  This fails because the caller set `nproc=3` resulting in the first three containers using up
   691  the three processes quota set for the `daemon` user.
   692  
   693  ### Stop container with signal (--stop-signal)
   694  
   695  The `--stop-signal` flag sets the system call signal that will be sent to the container to exit.
   696  This signal can be a valid unsigned number that matches a position in the kernel's syscall table, for instance 9,
   697  or a signal name in the format SIGNAME, for instance SIGKILL.
   698  
   699  ### Optional security options (--security-opt)
   700  
   701  On Windows, this flag can be used to specify the `credentialspec` option.
   702  The `credentialspec` must be in the format `file://spec.txt` or `registry://keyname`.
   703  
   704  ### Stop container with timeout (--stop-timeout)
   705  
   706  The `--stop-timeout` flag sets the timeout (in seconds) that a pre-defined (see `--stop-signal`) system call
   707  signal that will be sent to the container to exit. After timeout elapses the container will be killed with SIGKILL.
   708  
   709  ### Specify isolation technology for container (--isolation)
   710  
   711  This option is useful in situations where you are running Docker containers on
   712  Windows. The `--isolation <value>` option sets a container's isolation technology.
   713  On Linux, the only supported is the `default` option which uses
   714  Linux namespaces. These two commands are equivalent on Linux:
   715  
   716  ```bash
   717  $ docker run -d busybox top
   718  $ docker run -d --isolation default busybox top
   719  ```
   720  
   721  On Windows, `--isolation` can take one of these values:
   722  
   723  
   724  | Value     | Description                                                                                |
   725  |-----------|--------------------------------------------------------------------------------------------|
   726  | `default` | Use the value specified by the Docker daemon's `--exec-opt` or system default (see below). |
   727  | `process` | Shared-kernel namespace isolation (not supported on Windows client operating systems).     |
   728  | `hyperv`  | Hyper-V hypervisor partition-based isolation.                                              |
   729  
   730  The default isolation on Windows server operating systems is `process`. The default (and only supported)
   731  isolation on Windows client operating systems is `hyperv`. An attempt to start a container on a client
   732  operating system with `--isolation process` will fail.
   733  
   734  On Windows server, assuming the default configuration, these commands are equivalent
   735  and result in `process` isolation:
   736  
   737  ```PowerShell
   738  PS C:\> docker run -d microsoft/nanoserver powershell echo process
   739  PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo process
   740  PS C:\> docker run -d --isolation process microsoft/nanoserver powershell echo process
   741  ```
   742  
   743  If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, or
   744  are running against a Windows client-based daemon, these commands are equivalent and
   745  result in `hyperv` isolation:
   746  
   747  ```PowerShell
   748  PS C:\> docker run -d microsoft/nanoserver powershell echo hyperv
   749  PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo hyperv
   750  PS C:\> docker run -d --isolation hyperv microsoft/nanoserver powershell echo hyperv
   751  ```
   752  
   753  ### Configure namespaced kernel parameters (sysctls) at runtime
   754  
   755  The `--sysctl` sets namespaced kernel parameters (sysctls) in the
   756  container. For example, to turn on IP forwarding in the containers
   757  network namespace, run this command:
   758  
   759  ```bash
   760  $ docker run --sysctl net.ipv4.ip_forward=1 someimage
   761  ```
   762  
   763  > **Note**: Not all sysctls are namespaced. Docker does not support changing sysctls
   764  > inside of a container that also modify the host system. As the kernel
   765  > evolves we expect to see more sysctls become namespaced.
   766  
   767  #### Currently supported sysctls
   768  
   769  - `IPC Namespace`:
   770  
   771    ```none
   772    kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced
   773    Sysctls beginning with fs.mqueue.*
   774    ```
   775  
   776    If you use the `--ipc=host` option these sysctls will not be allowed.
   777  
   778  - `Network Namespace`:
   779  
   780    Sysctls beginning with net.*
   781  
   782    If you use the `--network=host` option using these sysctls will not be allowed.