dwww Home | Manual pages | Find package

DOCKER(1)                     Docker User Manuals                    DOCKER(1)

NAME
       docker-run - Create and run a new container from an image

SYNOPSIS
       docker  run  [-a|--attach[=[]]]  [--add-host[=[]]]  [--annotation[=[]]]
       [--blkio-weight[=[BLKIO-WEIGHT]]]          [--blkio-weight-device[=[]]]
       [-c|--cpu-shares[=0]]         [--cap-add[=[]]]        [--cap-drop[=[]]]
       [--cgroupns[=[]]] [--cgroup-parent[=CGROUP-PATH]] [--cidfile[=CIDFILE]]
       [--cpu-count[=0]]    [--cpu-percent[=0]]   [--cpu-period[=0]]   [--cpu-
       quota[=0]] [--cpu-rt-period[=0]] [--cpu-rt-runtime[=0]]  [--cpus[=0.0]]
       [--cpuset-cpus[=CPUSET-CPUS]]  [--cpuset-mems[=CPUSET-MEMS]]  [-d|--de-
       tach] [--detach-keys[=[]]] [--device[=[]]]  [--device-cgroup-rule[=[]]]
       [--device-read-bps[=[]]]   [--device-read-iops[=[]]]   [--device-write-
       bps[=[]]] [--device-write-iops[=[]]]  [--dns[=[]]]  [--dns-option[=[]]]
       [--dns-search[=[]]]  [--domainname[=DOMAINNAME]] [-e|--env[=[]]] [--en-
       trypoint[=ENTRYPOINT]]  [--env-file[=[]]]   [--expose[=[]]]   [--group-
       add[=[]]]  [-h|--hostname[=HOSTNAME]]  [--help] [--init] [-i|--interac-
       tive]   [--ip[=IPv4-ADDRESS]]   [--ip6[=IPv6-ADDRESS]]    [--ipc[=IPC]]
       [--isolation[=default]]      [-l|--label[=[]]]      [--label-file[=[]]]
       [--link[=[]]]   [--link-local-ip[=[]]]   [--log-driver[=[]]]    [--log-
       opt[=[]]]  [-m|--memory[=MEMORY]] [--mac-address[=MAC-ADDRESS]] [--mem-
       ory-reservation[=MEMORY-RESERVATION]]  [--memory-swap[=LIMIT]]  [--mem-
       ory-swappiness[=MEMORY-SWAPPINESS]] [--mount[=[MOUNT]]] [--name[=NAME]]
       [--network-alias[=[]]]   [--network[="bridge"]]    [--oom-kill-disable]
       [--oom-score-adj[=0]]       [-P|--publish-all]      [-p|--publish[=[]]]
       [--pid[=[PID]]] [--userns[=[]]]  [--pids-limit[=PIDS_LIMIT]]  [--privi-
       leged] [--read-only] [--restart[=RESTART]] [--rm] [--security-opt[=[]]]
       [--storage-opt[=[]]]  [--stop-signal[=SIGNAL]]   [--stop-timeout[=TIME-
       OUT]] [--shm-size[=[]]] [--sig-proxy[=true]] [--sysctl[=[]]] [-t|--tty]
       [--tmpfs[=[CONTAINER-DIR[:OPTIONS]]] [-u|--user[=USER]] [--ulimit[=[]]]
       [--uts[=[]]]       [-v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]]
       [--volume-driver[=DRIVER]]                        [--volumes-from[=[]]]
       [-w|--workdir[=WORKDIR]] IMAGE [COMMAND] [ARG...]

DESCRIPTION
       Run  a process in a new container. docker run starts a process with its
       own file system, its own networking, and its own isolated process tree.
       The  IMAGE  which starts the process may define defaults related to the
       process that will be run in the container, the  networking  to  expose,
       and  more, but docker run gives final control to the operator or admin-
       istrator who starts the container  from  the  image.  For  that  reason
       docker run has more options than any other Docker command.

       If the IMAGE is not already loaded then docker run will pull the IMAGE,
       and all image dependencies, from the repository in the same way running
       docker pull IMAGE, before it starts the container from that image.

OPTIONS
       -a, --attach=[]
          Attach to STDIN, STDOUT or STDERR.

       In foreground mode (the default when -d is not specified), docker run
          can start the process in the container and attach the console to the
       process's
          standard input, output, and standard error. It can even  pretend  to
       be a TTY
          (this  is  what  most commandline executables expect) and pass along
       signals.
          The -a option can be set for each of stdin, stdout, and stderr.

       --add-host=[]
          Add a custom host-to-IP mapping (host=ip, or host:ip)

       Add a line to /etc/hosts. The format is hostname=ip, or hostname:ip.
          The --add-host option can be set multiple times.

       --annotation=[]
          Add an annotation to the container (passed through to the  OCI  run-
       time).

       The annotations are provided to the OCI runtime.

       --blkio-weight=0
          Block  IO weight (relative weight) accepts a weight value between 10
       and 1000.

       --blkio-weight-device=[]
          Block   IO   weight   (relative   device   weight,    format:    DE-
       VICE_NAME:WEIGHT).

       -c, --cpu-shares=0
          CPU shares (relative weight)

       By  default, all containers get the same proportion of CPU cycles. This
       proportion
          can be modified by changing the container's CPU share weighting rel-
       ative
          to the weighting of all other running containers.

       To modify the proportion from the default of 1024, use the -c or --cpu-
       shares
          flag to set the weighting to 2 or higher.

       The proportion will only apply when CPU-intensive  processes  are  run-
       ning.
          When tasks in one container are idle, other containers can use the
          left-over  CPU time. The actual amount of CPU time will vary depend-
       ing on
          the number of containers running on the system.

       For example, consider three containers, one has a cpu-share of 1024 and
          two others have a cpu-share setting of 512. When  processes  in  all
       three
          containers attempt to use 100% of CPU, the first container would re-
       ceive
          50% of the total CPU time. If you add a fourth container with a cpu-
       share
          of 1024, the first container only gets 33% of the CPU. The remaining
       containers
          receive 16.5%, 16.5% and 33% of the CPU.

       On a multi-core system, the shares of CPU time are distributed over all
       CPU
          cores. Even if a container is limited to less than 100% of CPU time,
       it can
          use 100% of each individual CPU core.

       For example, consider a system with more than three cores. If you start
       one
          container  {C0}  with  -c=512  running one process, and another con-
       tainer
          {C1} with -c=1024 running two processes, this can result in the fol-
       lowing
          division of CPU shares:

       PID    container    CPU  CPU share
       100    {C0}         0    100% of CPU0
       101    {C1}         1    100% of CPU1
       102    {C1}         2    100% of CPU2

       --cap-add=[]
          Add Linux capabilities

       --cap-drop=[]
          Drop Linux capabilities

       --cgroupns=""
          Set the cgroup namespace mode for the container.
            host:    run the container in the host's cgroup namespace
            private: run the container in its own private cgroup namespace
            "":       (unset)  use the daemon's default configuration (host on
       cgroup v1, private on cgroup v2)

       --cgroup-parent=""
          Path to cgroups under which the cgroup for  the  container  will  be
       created.
          If  the  path is not absolute, the path is considered to be relative
       to the
          cgroups path of the init process. Cgroups will be created if they do
       not
          already exist.

       --cidfile=""
          Write the container ID to the file

       --cpu-count=0
          Limit the number of CPUs available for execution by the container.

       On  Windows  Server containers, this is approximated as a percentage of
       total
          CPU usage. On Windows Server containers, the processor resource con-
       trols
          are  mutually  exclusive, the order of precedence is CPUCount first,
       then
          CPUShares, and CPUPercent last.

       --cpu-percent=0
          Limit the percentage of CPU available for execution by  a  container
       running
          on a Windows daemon.

       On Windows Server containers, the processor resource controls are mutu-
       ally
          exclusive,  the  order  of  precedence  is  CPUCount   first,   then
       CPUShares, and
          CPUPercent last.

       --cpu-period=0
          Limit the CPU CFS (Completely Fair Scheduler) period

       Limit  the container's CPU usage. This flag tell the kernel to restrict
       the
          container's CPU usage to the period you specify.

       --cpuset-cpus=""
          CPUs in which to allow execution (0-3, 0,1)

       --cpuset-mems=""
          Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only ef-
       fective
          on NUMA systems.

       If  you  have  four  memory  nodes  on your system (0-3), use --cpuset-
       mems=0,1 then processes in your Docker container will only  use  memory
       from the first two memory nodes.

       --cpu-quota=0
          Limit the CPU CFS (Completely Fair Scheduler) quota

       Limit  the  container's  CPU usage. By default, containers run with the
       full
          CPU resource. This flag tell the kernel to restrict the  container's
       CPU
          usage to the quota you specify.

       --cpu-rt-period=0
          Limit the CPU real-time period in microseconds

       Limit the container's Real Time CPU usage. This flag tell the kernel to
          restrict the container's Real Time CPU usage to the period you spec-
       ify.

       --cpu-rt-runtime=0
          Limit the CPU real-time runtime in microseconds

       Limit the containers Real Time CPU usage. This flag tells the kernel to
          limit the amount of time in a given CPU period Real Time  tasks  may
       consume.
          For  example, a period of 1,000,000us and Runtime of 950,000us means
       that
          this container could consume 95% of available CPU and leave the  re-
       maining
          5% to normal priority tasks.

       The  sum of all runtimes across containers cannot exceed the amount al-
       lotted
          to the parent cgroup.

       --cpus=0.0
          Number of CPUs. The default is 0.0 which means no limit.

       -d, --detach=true|false
          Detached mode: run the container in the background and print the new
          container ID. The default is false.

       At any time you can run docker ps in the other shell to view a list
          of the running containers. You can reattach to a detached  container
       with
          docker attach.

       When  attached  in the tty mode, you can detach from the container (and
       leave
          it running) using a configurable key sequence. The default  sequence
       is
          CTRL-p CTRL-q.
          You configure the key sequence using the --detach-keys option or a
          configuration file. See config-json(5) for documentation on using a
          configuration file.

       --detach-keys=key
          Override the key sequence for detaching a container; key is a single
          character from the [a-Z] range, or ctrl-value, where value is
          one of: a-z, @, ^, [, ,, or _.

       --device=onhost:incontainer[:mode]
          Add  a  host  device  onhost  to the container under the incontainer
       name.
          Optional mode parameter can be used to specify  device  permissions,
       it is
          a combination of r (for read), w (for write), and m (for
          mknod(2)).

       For example, --device=/dev/sdc:/dev/xvdc:rwm will give a container all
          permissions for the host device /dev/sdc, seen as /dev/xvdc inside
          the container.

       --device-cgroup-rule="type major:minor mode"
          Add  a rule to the cgroup allowed devices list. The rule is expected
       to be
          in the format specified in the Linux kernel documentation
          (Documentation/cgroup-v1/devices.txt):
            - type: a (all), c (char), or b (block);
            - major and minor: either a number, or * for all;
            - mode: a composition of r (read), w (write), and m (mknod(2)).

       Example: --device-cgroup-rule "c 1:3 mr": allow for a character device
          identified by 1:3  to be created and read.

       --device-read-bps=[]
          Limit read rate from a device (e.g. --device-read-bps=/dev/sda:1mb)

       --device-read-iops=[]
          Limit   read   rate   from    a    device    (e.g.    --device-read-
       iops=/dev/sda:1000)

       --device-write-bps=[]
          Limit write rate to a device (e.g. --device-write-bps=/dev/sda:1mb)

       --device-write-iops=[]
          Limit    write    rate    to    a   device   (e.g.   --device-write-
       iops=/dev/sda:1000)

       --dns-search=[]
          Set custom DNS search domains (Use --dns-search=. if you don't  wish
       to set
          the search domain)

       --dns-option=[]
          Set custom DNS options

       --dns=[]
          Set custom DNS servers

       This option can be used to override the DNS configuration passed to the
          container.  Typically this is necessary when the host DNS configura-
       tion
          is invalid for the container (e.g., 127.0.0.1).  When  this  is  the
       case
          the --dns flags is necessary for every run.

       --domainname=""
          Container NIS domain name

       Sets  the  container's NIS domain name (see also setdomainname(2)) that
       is
          available inside the container.

       -e, --env=[]
          Set environment variables

       This option allows you to specify arbitrary environment variables  that
       are  available for the process that will be launched inside of the con-
       tainer.

       --entrypoint=""
          Overwrite the default ENTRYPOINT of the image

       This option allows you to overwrite the default entrypoint of the image
       that
          is set in the Dockerfile. The ENTRYPOINT of an image is similar to a
       COMMAND
          because it specifies what  executable  to  run  when  the  container
       starts, but it is
          (purposely)  more difficult to override. The ENTRYPOINT gives a con-
       tainer its
          default nature or behavior, so that when you set an  ENTRYPOINT  you
       can run the
          container  as if it were that binary, complete with default options,
       and you can
          pass in more options via the COMMAND. But, sometimes an operator may
       want to run
          something else inside the container, so you can override the default
       ENTRYPOINT
          at runtime by using a --entrypoint and a string to specify the new
          ENTRYPOINT.

       --env-file=[]
          Read in a line delimited file of environment variables

       --expose=[]
          Expose a port, or a range of ports (e.g. --expose=3300-3310) informs
       the
          docker  daemon  that  the container listens on the specified network
       ports at
          runtime. The docker daemon uses  this  information  to  interconnect
       containers
          using links and to set up port redirection on the host system.

       --group-add=[]
          Add additional groups to run as

       -h, --hostname=""
          Container host name

       Sets the container host name that is available inside the container.

       --help
          Print usage statement

       --init
          Run  an  init  inside  the container that forwards signals and reaps
       processes

       -i, --interactive=true|false
          Keep STDIN open even if not attached. The default is false.

       When set to true, keep stdin open even if not attached.

       --ip=""
          Sets the container's interface IPv4 address (e.g., 172.23.0.9)

       It can only be used in conjunction with --network for user-defined net-
       works

       --ip6=""
          Sets the container's interface IPv6 address (e.g., 2001:db8::1b99)

       It can only be used in conjunction with --network for user-defined net-
       works

       --ipc=""
          Sets the IPC mode for the container. The following  values  are  ac-
       cepted:

       ┌─────────────────────┬────────────────────────────┐
       │ValueDescription                │
       ├─────────────────────┼────────────────────────────┤
       │(empty)              │ Use daemon's default.      │
       ├─────────────────────┼────────────────────────────┤
       │none                 │ Own private IPC namespace, │
       │                     │ with /dev/shm not mounted. │
       ├─────────────────────┼────────────────────────────┤
       │private              │ Own private IPC namespace. │
       ├─────────────────────┼────────────────────────────┤
       │shareable            │ Own private IPC namespace, │
       │                     │ with   a   possibility  to │
       │                     │ share it with  other  con- │
       │                     │ tainers.                   │
       ├─────────────────────┼────────────────────────────┤
       │container:name-or-ID │ Join another ("shareable") │
       │                     │ container's IPC namespace. │
       ├─────────────────────┼────────────────────────────┤
       │host                 │ Use the host system's  IPC │
       │                     │ namespace.                 │
       └─────────────────────┴────────────────────────────┘

       If  not  specified, daemon default is used, which can either be private
       or shareable, depending on the daemon version and configuration.

       --isolation="default"
          Isolation specifies the type of isolation technology  used  by  con-
       tainers.  Note  that  the default on Windows server is process, and the
       default on Windows client is hyperv. Linux only supports default.

       -l, --label key=value
          Set metadata  on  the  container  (for  example,  --label  com.exam-
       ple.key=value).

       --label-file=[]
          Read in a line delimited file of labels

       --link=name-or-id[:alias]
          Add link to another container.

       If  the  operator  uses  --link when starting the new client container,
       then the client container can access the exposed  port  via  a  private
       networking interface. Docker will set some environment variables in the
       client container to help indicate which interface and port to use.

       --link-local-ip=[]
          Add one or more link-local IPv4/IPv6 addresses  to  the  container's
       interface

       --log-driver="json-file|syslog|journald|gelf|flu-
       entd|awslogs|splunk|etwlogs|gcplogs|none"
         Logging driver for the container. Default is defined by daemon --log-
       driver flag.
         Warning: the docker logs command works only for the json-file and
         journald logging drivers.

       --log-opt=[]
         Logging driver specific options.

       -m, --memory=number[*S]
          Memory  limit;  S is an optional suffix which can be one of b, k, m,
       or g.

       Allows you to constrain the memory available to  a  container.  If  the
       host
          supports  swap memory, then the -m memory setting can be larger than
       physical
          RAM. If a limit of 0 is specified (not using  -m),  the  container's
       memory is
          not limited. The actual limit may be rounded up to a multiple of the
       operating
          system's page size (the value would be very large,  that's  millions
       of trillions).

       --memory-reservation=number[*S]
          Memory soft limit; S is an optional suffix which can be one of b, k,
       m, or g.

       After setting memory reservation, when the system detects  memory  con-
       tention
          or  low  memory, containers are forced to restrict their consumption
       to their
          reservation. So you should always set the value below --memory, oth-
       erwise the
          hard limit will take precedence. By default, memory reservation will
       be the same
          as memory limit.

       --memory-swap=number[S]
          Combined memory plus swap limit; S is an optional suffix  which  can
       be
          one of b, k, m, or g.

       This option can only be used together with --memory. The argument
          should always be larger than that of --memory. Default is double the
          value of --memory. Set to -1 to enable unlimited swap.

       --mac-address=""
          Container MAC address (e.g., 92:d0:c6:0a:29:33)

       Remember  that  the  MAC address in an Ethernet network must be unique.
       The IPv6 link-local address will be based on the device's  MAC  address
       according to RFC4862.

       --mount type=TYPE,TYPE-SPECIFIC-OPTION[,...]
          Attach a filesystem mount to the container

       Current supported mount TYPES are bind, volume, and tmpfs.

       For example;

       type=bind,source=/path/on/host,destination=/path/in/container

       type=volume,source=my-volume,destination=/path/in/container,volume-la-
       bel="color=red"

       type=tmpfs,tmpfs-size=512M,destination=/path/in/container

       Common Options:

       • src, source: mount source spec for bind  and  volume.  Mandatory  for
         bind.

       • dst, destination, target: mount destination spec.

       • ro, readonly: true or false (default).

       Note: setting readonly for a bind mount may not make its submounts
          read-only depending on the kernel version. See also bind-recursive.

       Options specific to bind:

       • bind-propagation:  shared,  slave, private, rshared, rslave, or rpri-
         vate(default). See also mount(2).

       • consistency: consistent(default), cached,  or  delegated.  Currently,
         only effective for Docker for Mac.

       • bind-recursive: enabled (default), disabled, writable, or readonly:
           If  set  to enabled, submounts are recursively bind-mounted and at-
         tempted to be made recursively read-only.
           If set to disabled, submounts are not recursively bind-mounted.
           If set to writable, submounts are recursively bind-mounted but  not
         made recursively read-only.
           If  set  to  readonly,  submounts  are recursively bind-mounted and
         forcibly made recursively read-only.

       Options specific to volume:

       • volume-driver: Name of the volume-driver plugin.

       • volume-label: Custom metadata.

       • volume-nocopy: true(default) or false. If set to false, the Engine
          copies existing files and directories under the mount-path into  the
         volume,
          allowing the host to access them.

       • volume-opt: specific to a given volume driver.

       Options specific to tmpfs:

       • tmpfs-size: Size of the tmpfs mount in bytes. Unlimited by default in
         Linux.

       • tmpfs-mode: File mode of the tmpfs in octal. (e.g. 700 or 0700.)  De-
         faults to 1777 in Linux.

       --name=""
          Assign a name to the container

       The operator can identify a container in three ways:

       • long                                                              ID:
         f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778short ID: f78375b1c487Name: evil_ptolemy

       The ID identifiers come from the Docker daemon, and if a  name  is  not
       assigned
          to  the  container  with --name then the daemon will also generate a
       random
          string name. The name is useful when defining links (see --link) (or
       any
          other  place  you need to identify a container). This works for both
       background
          and foreground Docker containers.

       --network=type
          Set the Network mode for the container. Supported values are:

       ┌────────────────────────┬────────────────────────────┐
       │ValueDescription                │
       ├────────────────────────┼────────────────────────────┤
       │none                    │ No networking in the  con- │
       │                        │ tainer.                    │
       ├────────────────────────┼────────────────────────────┤
       │bridge                  │ Connect  the  container to │
       │                        │ the default Docker  bridge │
       │                        │ via veth interfaces.       │
       ├────────────────────────┼────────────────────────────┤
       │host                    │ Use   the  host's  network │
       │                        │ stack  inside   the   con- │
       │                        │ tainer.                    │
       ├────────────────────────┼────────────────────────────┤
       │container:name|id       │ Use  the  network stack of │
       │                        │ another container,  speci- │
       │                        │ fied via its name or id.   │
       ├────────────────────────┼────────────────────────────┤
       │network-name|network-id │ Connects  the container to │
       │                        │ a  user  created   network │
       │                        │ (using docker network cre- │
       │                        │ ate command)               │
       └────────────────────────┴────────────────────────────┘

       Default is bridge.

       --network-alias=[]
          Add network-scoped alias for the container

       --oom-kill-disable=true|false
          Whether to disable OOM Killer for the container or not.

       --oom-score-adj=""
          Tune the host's OOM preferences for  containers  (accepts  -1000  to
       1000)

       -P, --publish-all=true|false
          Publish  all  exposed  ports to random ports on the host interfaces.
       The default is false.

       When set to true publish all exposed ports to the host interfaces.  The
       default is false. If the operator uses -P (or -p) then Docker will make
       the exposed port accessible on the host and the ports will be available
       to  any client that can reach the host. When using -P, Docker will bind
       any exposed port to a random port on the host within an ephemeral  port
       range  defined  by  /proc/sys/net/ipv4/ip_local_port_range. To find the
       mapping between the host  ports  and  the  exposed  ports,  use  docker
       port(1).

       -p, --publish ip:[hostPort]:containerPort | [hostPort:]containerPort
          Publish a container's port, or range of ports, to the host.

       Both  hostPort  and  containerPort  can  be specified as a range.  When
       specifying ranges for both, the number of ports  in  ranges  should  be
       equal.

       Examples:  -p  1234-1236:1222-1224,  -p 127.0.0.1:$HOSTPORT:$CONTAINER-
       PORT.

       Use docker port(1) to see the actual mapping,  e.g.  docker  port  CON-
       TAINER $CONTAINERPORT.

       --pid=""
          Set the PID mode for the container
          Default is to create a private PID namespace for the container
          'container:': join another container's PID namespace
          'host':  use  the  host's PID namespace for the container. Note: the
       host mode
          gives the container full access to local PID and is  therefore  con-
       sidered insecure.

       --userns=""
          Set  the  usernamespace mode for the container when userns-remap op-
       tion is enabled.
            host: use the host usernamespace and enable all privileged options
       (e.g., pid=host or --privileged).

       --pids-limit=""
          Tune the container's pids (process IDs) limit. Set to -1 to have un-
       limited pids for the container.

       --uts=type
          Set the UTS mode for the container. The only possible type is host,
          meaning to use the host's UTS namespace inside the container.

       Note: the host mode gives the container access to changing  the  host's
       hostname
          and is therefore considered insecure.

       --privileged [true|false]
          Give extended privileges to this container. A "privileged" container
       is given access to all devices.

       When the operator executes docker run --privileged, Docker will  enable
       access  to all devices on the host as well as set some configuration in
       AppArmor to allow the container nearly all the same access to the  host
       as processes running outside of a container on the host.

       --read-only=true|false
          Mount the container's root filesystem as read only.

       By  default a container will have its root filesystem writable allowing
       processes to write files anywhere.  By specifying the --read-only  flag
       the  container  will have its root filesystem mounted as read only pro-
       hibiting any writes.

       --restart policy
          Restart policy to apply when a  container  exits.  Supported  values
       are:

       ┌─────────────────────────┬────────────────────────────┐
       │PolicyResult                     │
       ├─────────────────────────┼────────────────────────────┤
       │no                       │ Do    not    automatically │
       │                         │ restart the container when │
       │                         │ it exits.                  │
       ├─────────────────────────┼────────────────────────────┤
       │on-failure[:max-retries] │ Restart  only  if the con- │
       │                         │ tainer exits with  a  non- │
       │                         │ zero  exit status. Option- │
       │                         │ ally, limit the number  of │
       │                         │ restart retries the Docker │
       │                         │ daemon attempts.           │
       ├─────────────────────────┼────────────────────────────┤
       │always                   │ Always  restart  the  con- │
       │                         │ tainer  regardless  of the │
       │                         │ exit  status.   When   you │
       │                         │ specify always, the Docker │
       │                         │ daemon  tries  to  restart │
       │                         │ the    container   indefi- │
       │                         │ nitely. The container  al- │
       │                         │ ways   start   on   daemon │
       │                         │ startup, regardless of the │
       │                         │ current  state of the con- │
       │                         │ tainer.                    │
       ├─────────────────────────┼────────────────────────────┤
       │unless-stopped           │ Always  restart  the  con- │
       │                         │ tainer  regardless  of the │
       │                         │ exit status,  but  do  not │
       │                         │ start it on daemon startup │
       │                         │ if the container has  been │
       │                         │ put to a stopped state be- │
       │                         │ fore.                      │
       └─────────────────────────┴────────────────────────────┘

       Default is no.

       --rm true|false
          Automatically remove the container and its associated anonymous vol-
       umes when it exits. The default is false.
          --rm  flag  can work together with -d, and auto-removal will be done
       on
          daemon side. Note that it's incompatible  with  any  restart  policy
       other than
         none.

       --security-opt value[,...]
          Security  Options  for  the  container. The following options can be
       given:

       ┌────────────────────────┬────────────────────────────┐
       │OptionDescription                │
       ├────────────────────────┼────────────────────────────┤
       │"label=user:USER"       │ Set the label user for the │
       │                        │ container                  │
       ├────────────────────────┼────────────────────────────┤
       │"label=role:ROLE"       │ Set the label role for the │
       │                        │ container                  │
       ├────────────────────────┼────────────────────────────┤
       │"label=type:TYPE"       │ Set the label type for the │
       │                        │ container                  │
       ├────────────────────────┼────────────────────────────┤
       │"label=level:LEVEL"     │ Set  the  label  level for │
       │                        │ the container              │
       ├────────────────────────┼────────────────────────────┤
       │"label=disable"         │ Turn off label confinement │
       │                        │ for the container          │
       ├────────────────────────┼────────────────────────────┤
       │"no-new-privileges"     │ Disable   container   pro- │
       │                        │ cesses from gaining  addi- │
       │                        │ tional privileges          │
       ├────────────────────────┼────────────────────────────┤
       │"seccomp=unconfined"    │ Turn  off seccomp confine- │
       │                        │ ment for the container     │
       ├────────────────────────┼────────────────────────────┤
       │"seccomp=profile.json"  │ White listed syscalls sec- │
       │                        │ comp  Json file to be used │
       │                        │ as a seccomp filter        │
       ├────────────────────────┼────────────────────────────┤
       │"apparmor=unconfined"   │ Turn off apparmor confine- │
       │                        │ ment for the container     │
       ├────────────────────────┼────────────────────────────┤
       │"apparmor=your-profile" │ Set  the apparmor confine- │
       │                        │ ment profile for the  con- │
       │                        │ tainer                     │
       └────────────────────────┴────────────────────────────┘

       --storage-opt
          Storage driver options per container

       $ docker run -it --storage-opt size=120G fedora /bin/bash

       This (size) will allow to set the container rootfs size to 120G at cre-
       ation
          time. This option is only available for the btrfs, overlay2  and zfs
          graph drivers.
          For the btrfs and zfs storage drivers, user cannot pass a size  less
       than
          the  Default  BaseFS Size. For the overlay2 storage driver, the size
       option
          is only available if the backing fs is  xfs  and  mounted  with  the
       pquota
          mount  option.  Under  these conditions, user can pass any size less
       than the
          backing fs size.

       --stop-signal=""
          Signal to stop the container.

       The --stop-signal flag sets the system call signal that will be sent to
       the
          container  to  exit.  This signal can be a signal name in the format
       SIG<NAME>,
          for instance SIGKILL, or an unsigned number that matches a  position
       in the
          kernel's syscall table, for instance 9.

       The  default  is  defined by STOPSIGNAL in the image, or SIGTERM if the
       image
          has no STOPSIGNAL defined.

       --stop-timeout
         Timeout (in seconds) to stop a container, or -1 to disable timeout.

       The --stop-timeout flag sets the number of seconds to wait for the con-
       tainer
         to stop after sending the pre-defined (see --stop-signal) system call
       signal.
         If the container does not exit  after  the  timeout  elapses,  it  is
       forcibly killed
         with a SIGKILL signal.

       If  --stop-timeout  is set to -1, no timeout is applied, and the daemon
       will
         wait indefinitely for the container to exit.

       The default is determined by the daemon, and 10 seconds for Linux  con-
       tainers,
         and 30 seconds for Windows containers.

       --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.

       --sysctl=SYSCTL
         Configure namespaced kernel parameters at runtime

       IPC Namespace - current sysctls allowed:

       kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall,
         kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced, and sysctls be-
       ginning
         with fs.mqueue.*

       If you use the --ipc=host option these sysctls will not be allowed.

       Network Namespace - current sysctls allowed:
             Sysctls beginning with net.*

       If you use the --network=host option these sysctls will not be allowed.

       --sig-proxy=true|false
          Proxy received signals to the process (non-TTY mode only).  SIGCHLD,
       SIGSTOP,
          and SIGKILL are not proxied. The default is true.

       --memory-swappiness=""
          Tune  a  container's  memory swappiness behavior. Accepts an integer
       between 0 and 100.

       -t, --tty=true|false
          Allocate a pseudo-TTY. The default is false.

       When set to true Docker can allocate a pseudo-tty  and  attach  to  the
       standard  input of any container. This can be used, for example, to run
       a throwaway interactive shell. The default is false.

       The -t option is incompatible with a redirection of the  docker  client
       standard input.

       --tmpfs=[] Create a tmpfs mount

       Mount  a temporary filesystem (tmpfs) mount into a container, for exam-
       ple:

       $ docker run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image

       This command mounts a tmpfs at /tmp within  the  container.   The  sup-
       ported  mount options are the same as the Linux default mount flags. If
       you do not specify any options, the systems uses the following options:
       rw,noexec,nosuid,nodev,size=65536k.

       See also --mount, which is the successor of --tmpfs and --volume.
          Even  though there is no plan to deprecate --tmpfs, usage of --mount
       is recommended.

       -u, --user=""
          Sets the username or UID used and optionally the  groupname  or  GID
       for the specified command.

       The following examples are all valid:
          --user [user | user:group | uid | uid:gid | user:gid | uid:group ]

       Without this argument the command will be run as root in the container.

       --ulimit=[]
           Ulimit options

       -v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
          Create  a  bind  mount. If you specify, -v /HOST-DIR:/CONTAINER-DIR,
       Docker
          bind mounts /HOST-DIR in the host to /CONTAINER-DIR in the Docker
          container. If 'HOST-DIR' is omitted,  Docker  automatically  creates
       the new
          volume  on the host.  The OPTIONS are a comma delimited list and can
       be:

       • [rw|ro]

       • [z|Z]

       • [[r]shared|[r]slave|[r]private]

       • [delegated|cached|consistent]

       • [nocopy]

       The CONTAINER-DIR must be an absolute path such as /src/docs. The HOST-
       DIR  can  be  an absolute path or a name value. A name value must start
       with an alphanumeric character, followed by a-z0-9, _  (underscore),  .
       (period)  or  -  (hyphen).  An  absolute  path starts with a / (forward
       slash).

       If you supply a HOST-DIR that is an absolute path,  Docker  bind-mounts
       to  the  path you specify. If you supply a name, Docker creates a named
       volume by that name. For example, you can specify either  /foo  or  foo
       for  a  HOST-DIR  value. If you supply the /foo value, Docker creates a
       bind mount. If you supply the foo specification, Docker creates a named
       volume.

       You  can  specify multiple  -v options to mount one or more mounts to a
       container. To use these same mounts in other  containers,  specify  the
       --volumes-from option also.

       You  can supply additional options for each bind mount following an ad-
       ditional colon.  A :ro or :rw suffix mounts a volume  in  read-only  or
       read-write mode, respectively. By default, volumes are mounted in read-
       write mode.  You can also specify the consistency requirement  for  the
       mount,  either :consistent (the default), :cached, or :delegated.  Mul-
       tiple options are separated by commas, e.g. :ro,cached.

       Labeling systems like SELinux require that proper labels are placed  on
       volume  content mounted into a container. Without a label, the security
       system might prevent the processes running inside  the  container  from
       using the content. By default, Docker does not change the labels set by
       the OS.

       To change a label in the container context, you can add either  of  two
       suffixes  :z  or  :Z to the volume mount. These suffixes tell Docker to
       relabel file objects on the shared volumes. The z option  tells  Docker
       that  two  containers share the volume content. As a result, Docker la-
       bels the content with a shared content label. Shared volume labels  al-
       low all containers to read/write content.  The Z option tells Docker to
       label the content with a private unshared label.  Only the current con-
       tainer can use a private volume.

       By default bind mounted volumes are private. That means any mounts done
       inside container will not be visible on host and vice  versa.  One  can
       change this behavior by specifying a volume mount propagation property.
       Making a volume shared mounts done under that volume  inside  container
       will  be  visible on host and vice versa. Making a volume slave enables
       only one way mount propagation and that is mounts done  on  host  under
       that  volume  will  be  visible  inside container but not the other way
       around.

       To control mount propagation property of volume one can use :[r]shared,
       :[r]slave  or :[r]private propagation flag. Propagation property can be
       specified only for bind mounted volumes and not for internal volumes or
       named  volumes. For mount propagation to work source mount point (mount
       point where source dir is mounted on) has  to  have  right  propagation
       properties.  For  shared  volumes, source mount point has to be shared.
       And for slave volumes, source mount has to be either shared or slave.

       Use df <source-dir> to figure out the source mount and then use findmnt
       -o  TARGET,PROPAGATION  <source-mount-dir>  to  figure  out propagation
       properties of source mount. If findmnt utility is not  available,  then
       one   can   look   at   mount   entry   for   source   mount  point  in
       /proc/self/mountinfo. Look at optional fields and see if  any  propaga-
       tion  properties  are  specified.  shared:X means mount is shared, mas-
       ter:X means mount is slave and if nothing is there that means mount  is
       private.

       To  change  propagation  properties of a mount point use mount command.
       For example, if one wants to bind mount source directory /foo  one  can
       do  mount --bind /foo /foo and mount --make-private --make-shared /foo.
       This will convert /foo into a shared mount point. Alternatively one can
       directly change propagation properties of source mount. Say / is source
       mount for /foo, then use mount --make-shared /  to  convert  /  into  a
       shared mount.

              Note: When using systemd to manage the Docker daemon's start and
              stop, in the systemd unit file there is  an  option  to  control
              mount  propagation  for  the Docker daemon itself, called Mount-
              Flags. The value of this setting may cause  Docker  to  not  see
              mount  propagation changes made on the mount point. For example,
              if this value is slave, you may not be able to use the shared or
              rshared propagation on a volume.

       To  disable  automatic  copying  of data from the container path to the
       volume, use the nocopy flag. The nocopy flag can be set on bind  mounts
       and named volumes.

       See also --mount, which is the successor of --tmpfs and --volume.  Even
       though there is no plan to deprecate --volume, usage of --mount is rec-
       ommended.

       --volume-driver=""
          Container's volume driver. This driver creates volumes specified ei-
       ther from
          a Dockerfile's VOLUME instruction or from the docker run -v flag.
          See docker-volume-create(1) for full details.

       --volumes-from=[]
          Mount volumes from the specified container(s)

       Mounts already mounted volumes from a source container onto another
          container. You must supply the source's container-id. To share
          a volume, use the --volumes-from option when running
          the target container. You can share volumes even if the source  con-
       tainer
          is not running.

       By default, Docker mounts the volumes in the same mode (read-write or
          read-only) as it is mounted in the source container. Optionally, you
          can change this by suffixing the container-id with either the :ro or
          :rw keyword.

       If the location of the volume from the source container overlaps with
          data residing on a target container, then the volume hides
          that data on the target.

       -w, --workdir=""
          Working directory inside the container

       The  default  working directory for running binaries within a container
       is the root directory (/). The developer can set  a  different  default
       with  the Dockerfile WORKDIR instruction. The operator can override the
       working directory by using the -w option.

Exit Status
       The exit code from docker run gives information about why the container
       failed  to run or why it exited.  When docker run exits with a non-zero
       code, the exit codes follow the chroot standard, see below:

       125 if the error is with Docker daemon itself

       $ docker run --foo busybox; echo $?
       # flag provided but not defined: --foo
         See 'docker run --help'.
         125

       126 if the contained command cannot be invoked

       $ docker run busybox /etc; echo $?
       # exec: "/etc": permission denied
         docker: Error response from daemon: Contained command could not be invoked
         126

       127 if the contained command cannot be found

       $ docker run busybox foo; echo $?
       # exec: "foo": executable file not found in $PATH
         docker: Error response from daemon: Contained command not found or does not exist
         127

       Exit code of contained command otherwise

       $ docker run busybox /bin/sh -c 'exit 3'
       # 3

EXAMPLES
Running container in read-only mode
       During container image development, containers often need to  write  to
       the  image  content.   Installing  packages into /usr, for example.  In
       production, applications seldom need to write to the image.   Container
       applications  write to volumes if they need to write to file systems at
       all.  Applications can be made more secure by running them in read-only
       mode  using the --read-only switch.  This protects the containers image
       from modification. Read only containers may still need to write  tempo-
       rary  data.   The best way to handle this is to mount tmpfs directories
       on /run and /tmp.

       # docker run --read-only --tmpfs /run --tmpfs /tmp -i -t fedora /bin/bash

Exposing log messages from the container to the host's log
       If you want messages that are logged in your container to  show  up  in
       the  host's  syslog/journal then you should bind mount the /dev/log di-
       rectory as follows.

       # docker run -v /dev/log:/dev/log -i -t fedora /bin/bash

       From inside the container you can test this by sending a message to the
       log.

       (bash)# logger "Hello from my container"

       Then exit and check the journal.

       # exit

       # journalctl -b | grep Hello

       This should list the message sent to logger.

Attaching to one or more from STDIN, STDOUT, STDERR
       If you do not specify -a then Docker will attach everything (stdin,std-
       out,stderr) . You can specify to which of the  three  standard  streams
       (stdin, stdout, stderr) you'd like to connect instead, as in:

       # docker run -a stdin -a stdout -i -t fedora /bin/bash

Sharing IPC between containers
       Using              shm_server.c             available             here:
       https://www.cs.cf.ac.uk/Dave/C/node27.html

       Testing --ipc=host mode:

       Host shows a shared memory segment with 7 pids attached, happens to  be
       from httpd:

        $ sudo ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status
        0x01128e25 0          root       600        1000       7

       Now  run  a regular container, and it correctly does NOT see the shared
       memory segment from the host:

        $ docker run -it shm ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status

       Run a container with the new --ipc=host option, and  it  now  sees  the
       shared memory segment from the host httpd:

        $ docker run -it --ipc=host shm ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status
        0x01128e25 0          root       600        1000       7

       Testing --ipc=container:CONTAINERID mode:

       Start a container with a program to create a shared memory segment:

        $ docker run -it shm bash
        $ sudo shm/shm_server &
        $ sudo ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status
        0x0000162e 0          root       666        27         1

       Create a second container correctly shows no shared memory segment from
       first container:

        $ docker run shm ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status

       Create a 3rd container using the  new  --ipc=container:CONTAINERID  op-
       tion, now it shows the shared memory segment from the first:

        $ docker run -it --ipc=container:ed735b2264ac shm ipcs -m
        $ sudo ipcs -m

        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status
        0x0000162e 0          root       666        27         1

Linking Containers
              Note:  This  section describes linking between containers on the
              default (bridge) network, also known as  "legacy  links".  Using
              --link  on  user-defined  networks uses the DNS-based discovery,
              which does not add entries to /etc/hosts, and does not set envi-
              ronment variables for discovery.

       The  link  feature  allows multiple containers to communicate with each
       other. For example, a container whose Dockerfile has  exposed  port  80
       can be run and named as follows:

       # docker run --name=link-test -d -i -t fedora/httpd

       A  second  container,  in this case called linker, can communicate with
       the httpd container, named link-test, by running with the --link=:

       # docker run -t -i --link=link-test:lt --name=linker fedora /bin/bash

       Now the container linker is linked  to  container  link-test  with  the
       alias  lt.  Running the env command in the linker container shows envi-
       ronment variables
        with the LT (alias) context (LT_)

       # env
       HOSTNAME=668231cb0978
       TERM=xterm
       LT_PORT_80_TCP=tcp://172.17.0.3:80
       LT_PORT_80_TCP_PORT=80
       LT_PORT_80_TCP_PROTO=tcp
       LT_PORT=tcp://172.17.0.3:80
       PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
       PWD=/
       LT_NAME=/linker/lt
       SHLVL=1
       HOME=/
       LT_PORT_80_TCP_ADDR=172.17.0.3
       _=/usr/bin/env

       When linking two containers Docker will use the exposed  ports  of  the
       container to create a secure tunnel for the parent to access.

       If  a  container  is connected to the default bridge network and linked
       with other containers, then the container's /etc/hosts file is  updated
       with the linked container's name.

              Note  Since  Docker  may  live update the container's /etc/hosts
              file, there may be situations when  processes  inside  the  con-
              tainer  can  end  up  reading  an empty or incomplete /etc/hosts
              file. In most cases, retrying the  read  again  should  fix  the
              problem.

Mapping Ports for External Usage
       The  exposed  port of an application can be mapped to a host port using
       the -p flag. For example, an httpd port 80 can be mapped  to  the  host
       port 8080 using the following:

       # docker run -p 8080:80 -d -i -t fedora/httpd

Creating and Mounting a Data Volume Container
       Many applications require the sharing of persistent data across several
       containers. Docker allows you to create a Data  Volume  Container  that
       other  containers can mount from. For example, create a named container
       that contains directories /var/volume1 and /tmp/volume2. The image will
       need to contain these directories so a couple of RUN mkdir instructions
       might be required for you fedora-data image:

       # docker run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true
       # docker run --volumes-from=data --name=fedora-container1 -i -t fedora bash

       Multiple --volumes-from parameters will bring  together  multiple  data
       volumes  from  multiple containers. And it's possible to mount the vol-
       umes that came from the DATA container in yet another container via the
       fedora-container1  intermediary container, allowing to abstract the ac-
       tual data source from users of that data:

       # docker run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash

Mounting External Volumes
       To mount a host directory as a container volume, specify  the  absolute
       path to the directory and the absolute path for the container directory
       separated by a colon:

       # docker run -v /var/db:/data1 -i -t fedora bash

       When using SELinux, be aware that the host has  no  knowledge  of  con-
       tainer SELinux policy. Therefore, in the above example, if SELinux pol-
       icy is enforced, the /var/db directory is  not  writable  to  the  con-
       tainer. A "Permission Denied" message will occur and an avc: message in
       the host's syslog.

       To work around this, at time of writing this man  page,  the  following
       command needs to be run in order for the proper SELinux policy type la-
       bel to be attached to the host directory:

       # chcon -Rt svirt_sandbox_file_t /var/db

       Now, writing to the /data1 volume in the container will be allowed  and
       the changes will also be reflected on the host in /var/db.

Using alternative security labeling
       You  can  override  the  default  labeling scheme for each container by
       specifying the --security-opt flag. For example, you  can  specify  the
       MCS/MLS  level,  a requirement for MLS systems. Specifying the level in
       the following command allows you to share the same content between con-
       tainers.

       # docker run --security-opt label=level:s0:c100,c200 -i -t fedora bash

       An MLS example might be:

       # docker run --security-opt label=level:TopSecret -i -t rhel7 bash

       To disable the security labeling for this container versus running with
       the --permissive flag, use the following command:

       # docker run --security-opt label=disable -i -t fedora bash

       If you want a tighter security policy on the processes  within  a  con-
       tainer,  you can specify an alternate type for the container. You could
       run a container that is only allowed to listen on Apache ports by  exe-
       cuting the following command:

       # docker run --security-opt label=type:svirt_apache_t -i -t centos bash

       Note:

       You would have to write policy defining a svirt_apache_t type.

Setting device weight
       If  you  want to set /dev/sda device weight to 200, you can specify the
       device weight by --blkio-weight-device flag. Use the following command:

       # docker run -it --blkio-weight-device "/dev/sda:200" ubuntu

Specify isolation technology for container (--isolation)
       This option is useful in situations where you are running  Docker  con-
       tainers  on  Microsoft  Windows.  The --isolation <value> option sets a
       container's isolation technology. On Linux, the only supported  is  the
       default  option  which  uses  Linux  namespaces. These two commands are
       equivalent on Linux:

       $ docker run -d busybox top
       $ docker run -d --isolation default busybox top

       On Microsoft Windows, can take any of these values:

       • default: Use the value specified by the Docker daemon's --exec-opt  .
         If  the  daemon  does  not specify an isolation technology, Microsoft
         Windows uses process as its default value.

       • process: Namespace isolation only.

       • hyperv: Hyper-V hypervisor partition-based isolation.

       In practice, when running on Microsoft Windows without a daemon  option
       set, these two commands are equivalent:

       $ docker run -d --isolation default busybox top
       $ docker run -d --isolation process busybox top

       If  you  have  set the --exec-opt isolation=hyperv option on the Docker
       daemon, any of these commands also result in hyperv isolation:

       $ docker run -d --isolation default busybox top
       $ docker run -d --isolation hyperv busybox top

Setting Namespaced Kernel Parameters (Sysctls)
       The --sysctl sets namespaced kernel parameters (sysctls)  in  the  con-
       tainer. For example, to turn on IP forwarding in the containers network
       namespace, run this command:

       $ docker run --sysctl net.ipv4.ip_forward=1 someimage

       Note:

       Not all sysctls  are  namespaced.  Docker  does  not  support  changing
       sysctls  inside of a container that also modify the host system. As the
       kernel evolves we expect to see more sysctls become namespaced.

       See the definition of the --sysctl option above for the current list of
       supported sysctls.

HISTORY
       April  2014, Originally compiled by William Henry (whenry at redhat dot
       com) based on docker.com source material and internal work.  June 2014,
       updated   by   Sven   Dowideit  SvenDowideit@home.org.au  ⟨mailto:Sven-
       Dowideit@home.org.au⟩  July  2014,  updated  by  Sven  Dowideit   Sven-
       Dowideit@home.org.au  ⟨mailto:SvenDowideit@home.org.au⟩  November 2015,
       updated by  Sally  O'Malley  somalley@redhat.com  ⟨mailto:somalley@red-
       hat.com⟩

Docker Community                   JUNE 2014                         DOCKER(1)

Generated by dwww version 1.14 on Mon Aug 3 11:10:26 CEST 2026.