github.com/rsampaio/docker@v0.7.2-0.20150827203920-fdc73cc3fc31/docs/reference/commandline/run.md (about) 1 <!--[metadata]> 2 +++ 3 title = "run" 4 description = "The run command description and usage" 5 keywords = ["run, command, container"] 6 [menu.main] 7 parent = "smn_cli" 8 weight=1 9 +++ 10 <![end-metadata]--> 11 12 # run 13 14 Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 15 16 Run a command in a new container 17 18 -a, --attach=[] Attach to STDIN, STDOUT or STDERR 19 --add-host=[] Add a custom host-to-IP mapping (host:ip) 20 --blkio-weight=0 Block IO weight (relative weight) 21 -c, --cpu-shares=0 CPU shares (relative weight) 22 --cap-add=[] Add Linux capabilities 23 --cap-drop=[] Drop Linux capabilities 24 --cgroup-parent="" Optional parent cgroup for the container 25 --cidfile="" Write the container ID to the file 26 --cpu-period=0 Limit CPU CFS (Completely Fair Scheduler) period 27 --cpu-quota=0 Limit CPU CFS (Completely Fair Scheduler) quota 28 --cpuset-cpus="" CPUs in which to allow execution (0-3, 0,1) 29 --cpuset-mems="" Memory nodes (MEMs) in which to allow execution (0-3, 0,1) 30 -d, --detach=false Run container in background and print container ID 31 --device=[] Add a host device to the container 32 --dns=[] Set custom DNS servers 33 --dns-search=[] Set custom DNS search domains 34 -e, --env=[] Set environment variables 35 --entrypoint="" Overwrite the default ENTRYPOINT of the image 36 --env-file=[] Read in a file of environment variables 37 --expose=[] Expose a port or a range of ports 38 --group-add=[] Add additional groups to run as 39 -h, --hostname="" Container host name 40 --help=false Print usage 41 -i, --interactive=false Keep STDIN open even if not attached 42 --ipc="" IPC namespace to use 43 --kernel-memory="" Kernel memory limit 44 -l, --label=[] Set metadata on the container (e.g., --label=com.example.key=value) 45 --label-file=[] Read in a file of labels (EOL delimited) 46 --link=[] Add link to another container 47 --log-driver="" Logging driver for container 48 --log-opt=[] Log driver specific options 49 --lxc-conf=[] Add custom lxc options 50 -m, --memory="" Memory limit 51 --mac-address="" Container MAC address (e.g. 92:d0:c6:0a:29:33) 52 --memory-swap="" Total memory (memory + swap), '-1' to disable swap 53 --memory-swappiness="" Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. 54 --name="" Assign a name to the container 55 --net="bridge" Set the Network mode for the container 56 --oom-kill-disable=false Whether to disable OOM Killer for the container or not 57 -P, --publish-all=false Publish all exposed ports to random ports 58 -p, --publish=[] Publish a container's port(s) to the host 59 --pid="" PID namespace to use 60 --privileged=false Give extended privileges to this container 61 --read-only=false Mount the container's root filesystem as read only 62 --restart="no" Restart policy (no, on-failure[:max-retry], always, unless-stopped) 63 --rm=false Automatically remove the container when it exits 64 --security-opt=[] Security Options 65 --sig-proxy=true Proxy received signals to the process 66 -t, --tty=false Allocate a pseudo-TTY 67 -u, --user="" Username or UID (format: <name|uid>[:<group|gid>]) 68 --ulimit=[] Ulimit options 69 --disable-content-trust=true Skip image verification 70 --uts="" UTS namespace to use 71 -v, --volume=[] Bind mount a volume 72 --volumes-from=[] Mount volumes from the specified container(s) 73 -w, --workdir="" Working directory inside the container 74 75 The `docker run` command first `creates` a writeable container layer over the 76 specified image, and then `starts` it using the specified command. That is, 77 `docker run` is equivalent to the API `/containers/create` then 78 `/containers/(id)/start`. A stopped container can be restarted with all its 79 previous changes intact using `docker start`. See `docker ps -a` to view a list 80 of all containers. 81 82 There is detailed information about `docker run` in the [Docker run reference]( 83 /reference/run/). 84 85 The `docker run` command can be used in combination with `docker commit` to 86 [*change the command that a container runs*](/reference/commandline/commit). 87 88 See the [Docker User Guide](/userguide/dockerlinks/) for more detailed 89 information about the `--expose`, `-p`, `-P` and `--link` parameters, 90 and linking containers. 91 92 ## Examples 93 94 $ docker run --name test -it debian 95 root@d6c0fe130dba:/# exit 13 96 $ echo $? 97 13 98 $ docker ps -a | grep test 99 d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test 100 101 This example runs a container named `test` using the `debian:latest` 102 image. The `-it` instructs Docker to allocate a pseudo-TTY connected to 103 the container's stdin; creating an interactive `bash` shell in the container. 104 In the example, the `bash` shell is quit by entering 105 `exit 13`. This exit code is passed on to the caller of 106 `docker run`, and is recorded in the `test` container's metadata. 107 108 $ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test" 109 110 This will create a container and print `test` to the console. The `cidfile` 111 flag makes Docker attempt to create a new file and write the container ID to it. 112 If the file exists already, Docker will return an error. Docker will close this 113 file when `docker run` exits. 114 115 $ docker run -t -i --rm ubuntu bash 116 root@bc338942ef20:/# mount -t tmpfs none /mnt 117 mount: permission denied 118 119 This will *not* work, because by default, most potentially dangerous kernel 120 capabilities are dropped; including `cap_sys_admin` (which is required to mount 121 filesystems). However, the `--privileged` flag will allow it to run: 122 123 $ docker run --privileged ubuntu bash 124 root@50e3f57e16e6:/# mount -t tmpfs none /mnt 125 root@50e3f57e16e6:/# df -h 126 Filesystem Size Used Avail Use% Mounted on 127 none 1.9G 0 1.9G 0% /mnt 128 129 The `--privileged` flag gives *all* capabilities to the container, and it also 130 lifts all the limitations enforced by the `device` cgroup controller. In other 131 words, the container can then do almost everything that the host can do. This 132 flag exists to allow special use-cases, like running Docker within Docker. 133 134 $ docker run -w /path/to/dir/ -i -t ubuntu pwd 135 136 The `-w` lets the command being executed inside directory given, here 137 `/path/to/dir/`. If the path does not exists it is created inside the container. 138 139 $ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd 140 141 The `-v` flag mounts the current working directory into the container. The `-w` 142 lets the command being executed inside the current working directory, by 143 changing into the directory to the value returned by `pwd`. So this 144 combination executes the command using the container, but inside the 145 current working directory. 146 147 $ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash 148 149 When the host directory of a bind-mounted volume doesn't exist, Docker 150 will automatically create this directory on the host for you. In the 151 example above, Docker will create the `/doesnt/exist` 152 folder before starting your container. 153 154 $ docker run --read-only -v /icanwrite busybox touch /icanwrite here 155 156 Volumes can be used in combination with `--read-only` to control where 157 a container writes files. The `--read-only` flag mounts the container's root 158 filesystem as read only prohibiting writes to locations other than the 159 specified volumes for the container. 160 161 $ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v ./static-docker:/usr/bin/docker busybox sh 162 163 By bind-mounting the docker unix socket and statically linked docker 164 binary (such as that provided by [https://get.docker.com]( 165 https://get.docker.com)), you give the container the full access to create and 166 manipulate the host's Docker daemon. 167 168 $ docker run -p 127.0.0.1:80:8080 ubuntu bash 169 170 This binds port `8080` of the container to port `80` on `127.0.0.1` of 171 the host machine. The [Docker User Guide](/userguide/dockerlinks/) 172 explains in detail how to manipulate ports in Docker. 173 174 $ docker run --expose 80 ubuntu bash 175 176 This exposes port `80` of the container for use within a link without 177 publishing the port to the host system's interfaces. The [Docker User 178 Guide](/userguide/dockerlinks) explains in detail how to manipulate 179 ports in Docker. 180 181 $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash 182 183 This sets environmental variables in the container. For illustration all three 184 flags are shown here. Where `-e`, `--env` take an environment variable and 185 value, or if no `=` is provided, then that variable's current value is passed 186 through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` in the container). 187 When no `=` is provided and that variable is not defined in the client's 188 environment then that variable will be removed from the container's list of 189 environment variables. 190 All three flags, `-e`, `--env` and `--env-file` can be repeated. 191 192 Regardless of the order of these three flags, the `--env-file` are processed 193 first, and then `-e`, `--env` flags. This way, the `-e` or `--env` will 194 override variables as needed. 195 196 $ cat ./env.list 197 TEST_FOO=BAR 198 $ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO 199 TEST_FOO=This is a test 200 201 The `--env-file` flag takes a filename as an argument and expects each line 202 to be in the `VAR=VAL` format, mimicking the argument passed to `--env`. Comment 203 lines need only be prefixed with `#` 204 205 An example of a file passed with `--env-file` 206 207 $ cat ./env.list 208 TEST_FOO=BAR 209 210 # this is a comment 211 TEST_APP_DEST_HOST=10.10.0.127 212 TEST_APP_DEST_PORT=8888 213 _TEST_BAR=FOO 214 TEST_APP_42=magic 215 helloWorld=true 216 # 123qwe=bar <- is not valid 217 218 # pass through this variable from the caller 219 TEST_PASSTHROUGH 220 $ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env 221 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 222 HOSTNAME=5198e0745561 223 TEST_FOO=BAR 224 TEST_APP_DEST_HOST=10.10.0.127 225 TEST_APP_DEST_PORT=8888 226 _TEST_BAR=FOO 227 TEST_APP_42=magic 228 helloWorld=true 229 TEST_PASSTHROUGH=howdy 230 HOME=/root 231 232 $ docker run --env-file ./env.list busybox env 233 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 234 HOSTNAME=5198e0745561 235 TEST_FOO=BAR 236 TEST_APP_DEST_HOST=10.10.0.127 237 TEST_APP_DEST_PORT=8888 238 _TEST_BAR=FOO 239 TEST_APP_42=magic 240 helloWorld=true 241 TEST_PASSTHROUGH= 242 HOME=/root 243 244 > **Note**: Environment variables names must consist solely of letters, numbers, 245 > and underscores - and cannot start with a number. 246 247 A label is a a `key=value` pair that applies metadata to a container. To label a container with two labels: 248 249 $ docker run -l my-label --label com.example.foo=bar ubuntu bash 250 251 The `my-label` key doesn't specify a value so the label defaults to an empty 252 string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). 253 254 The `key=value` must be unique to avoid overwriting the label value. If you 255 specify labels with identical keys but different values, each subsequent value 256 overwrites the previous. Docker uses the last `key=value` you supply. 257 258 Use the `--label-file` flag to load multiple labels from a file. Delimit each 259 label in the file with an EOL mark. The example below loads labels from a 260 labels file in the current directory: 261 262 $ docker run --label-file ./labels ubuntu bash 263 264 The label-file format is similar to the format for loading environment 265 variables. (Unlike environment variables, labels are not visible to processes 266 running inside a container.) The following example illustrates a label-file 267 format: 268 269 com.example.label1="a label" 270 271 # this is a comment 272 com.example.label2=another\ label 273 com.example.label3 274 275 You can load multiple label-files by supplying multiple `--label-file` flags. 276 277 For additional information on working with labels, see [*Labels - custom 278 metadata in Docker*](/userguide/labels-custom-metadata/) in the Docker User 279 Guide. 280 281 $ docker run --link /redis:redis --name console ubuntu bash 282 283 The `--link` flag will link the container named `/redis` into the newly 284 created container with the alias `redis`. The new container can access the 285 network and environment of the `redis` container via environment variables. 286 The `--link` flag will also just accept the form `<name or id>` in which case 287 the alias will match the name. For instance, you could have written the previous 288 example as: 289 290 $ docker run --link redis --name console ubuntu bash 291 292 The `--name` flag will assign the name `console` to the newly created 293 container. 294 295 $ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd 296 297 The `--volumes-from` flag mounts all the defined volumes from the referenced 298 containers. Containers can be specified by repetitions of the `--volumes-from` 299 argument. The container ID may be optionally suffixed with `:ro` or `:rw` to 300 mount the volumes in read-only or read-write mode, respectively. By default, 301 the volumes are mounted in the same mode (read write or read only) as 302 the reference container. 303 304 Labeling systems like SELinux require that proper labels are placed on volume 305 content mounted into a container. Without a label, the security system might 306 prevent the processes running inside the container from using the content. By 307 default, Docker does not change the labels set by the OS. 308 309 To change the label in the container context, you can add either of two suffixes 310 `:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file 311 objects on the shared volumes. The `z` option tells Docker that two containers 312 share the volume content. As a result, Docker labels the content with a shared 313 content label. Shared volume labels allow all containers to read/write content. 314 The `Z` option tells Docker to label the content with a private unshared label. 315 Only the current container can use a private volume. 316 317 The `-a` flag tells `docker run` to bind to the container's `STDIN`, `STDOUT` 318 or `STDERR`. This makes it possible to manipulate the output and input as 319 needed. 320 321 $ echo "test" | docker run -i -a stdin ubuntu cat - 322 323 This pipes data into a container and prints the container's ID by attaching 324 only to the container's `STDIN`. 325 326 $ docker run -a stderr ubuntu echo test 327 328 This isn't going to print anything unless there's an error because we've 329 only attached to the `STDERR` of the container. The container's logs 330 still store what's been written to `STDERR` and `STDOUT`. 331 332 $ cat somefile | docker run -i -a stdin mybuilder dobuild 333 334 This is how piping a file into a container could be done for a build. 335 The container's ID will be printed after the build is done and the build 336 logs could be retrieved using `docker logs`. This is 337 useful if you need to pipe a file or something else into a container and 338 retrieve the container's ID once the container has finished running. 339 340 $ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo} 341 brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc 342 brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd 343 crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo 344 345 It is often necessary to directly expose devices to a container. The `--device` 346 option enables that. For example, a specific block storage device or loop 347 device or audio device can be added to an otherwise unprivileged container 348 (without the `--privileged` flag) and have the application directly access it. 349 350 By default, the container will be able to `read`, `write` and `mknod` these devices. 351 This can be overridden using a third `:rwm` set of options to each `--device` 352 flag: 353 354 355 $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc 356 357 Command (m for help): q 358 $ docker run --device=/dev/sda:/dev/xvdc:ro --rm -it ubuntu fdisk /dev/xvdc 359 You will not be able to write the partition table. 360 361 Command (m for help): q 362 363 $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc 364 365 Command (m for help): q 366 367 $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc 368 fdisk: unable to open /dev/xvdc: Operation not permitted 369 370 > **Note:** 371 > `--device` cannot be safely used with ephemeral devices. Block devices 372 > that may be removed should not be added to untrusted containers with 373 > `--device`. 374 375 **A complete example:** 376 377 $ docker run -d --name static static-web-files sh 378 $ docker run -d --expose=8098 --name riak riakserver 379 $ docker run -d -m 100m -e DEVELOPMENT=1 -e BRANCH=example-code -v $(pwd):/app/bin:ro --name app appserver 380 $ docker run -d -p 1443:443 --dns=10.0.0.1 --dns-search=dev.org -v /var/log/httpd --volumes-from static --link riak --link app -h www.sven.dev.org --name web webserver 381 $ docker run -t -i --rm --volumes-from web -w /var/log/httpd busybox tail -f access.log 382 383 This example shows five containers that might be set up to test a web 384 application change: 385 386 1. Start a pre-prepared volume image `static-web-files` (in the background) 387 that has CSS, image and static HTML in it, (with a `VOLUME` instruction in 388 the Dockerfile to allow the web server to use those files); 389 2. Start a pre-prepared `riakserver` image, give the container name `riak` and 390 expose port `8098` to any containers that link to it; 391 3. Start the `appserver` image, restricting its memory usage to 100MB, setting 392 two environment variables `DEVELOPMENT` and `BRANCH` and bind-mounting the 393 current directory (`$(pwd)`) in the container in read-only mode as `/app/bin`; 394 4. Start the `webserver`, mapping port `443` in the container to port `1443` on 395 the Docker server, setting the DNS server to `10.0.0.1` and DNS search 396 domain to `dev.org`, creating a volume to put the log files into (so we can 397 access it from another container), then importing the files from the volume 398 exposed by the `static` container, and linking to all exposed ports from 399 `riak` and `app`. Lastly, we set the hostname to `web.sven.dev.org` so its 400 consistent with the pre-generated SSL certificate; 401 5. Finally, we create a container that runs `tail -f access.log` using the logs 402 volume from the `web` container, setting the workdir to `/var/log/httpd`. The 403 `--rm` option means that when the container exits, the container's layer is 404 removed. 405 406 ## Restart policies 407 408 Use Docker's `--restart` to specify a container's *restart policy*. A restart 409 policy controls whether the Docker daemon restarts a container after exit. 410 Docker supports the following restart policies: 411 412 <table> 413 <thead> 414 <tr> 415 <th>Policy</th> 416 <th>Result</th> 417 </tr> 418 </thead> 419 <tbody> 420 <tr> 421 <td><strong>no</strong></td> 422 <td> 423 Do not automatically restart the container when it exits. This is the 424 default. 425 </td> 426 </tr> 427 <tr> 428 <td> 429 <span style="white-space: nowrap"> 430 <strong>on-failure</strong>[:max-retries] 431 </span> 432 </td> 433 <td> 434 Restart only if the container exits with a non-zero exit status. 435 Optionally, limit the number of restart retries the Docker 436 daemon attempts. 437 </td> 438 </tr> 439 <tr> 440 <td><strong>always</strong></td> 441 <td> 442 Always restart the container regardless of the exit status. 443 When you specify always, the Docker daemon will try to restart 444 the container indefinitely. The container will also always start 445 on daemon startup, regardless of the current state of the container. 446 </td> 447 </tr> 448 <tr> 449 <td><strong>unless-stopped</strong></td> 450 <td> 451 Always restart the container regardless of the exit status, but 452 do not start it on daemon startup if the container has been put 453 to a stopped state before. 454 </td> 455 </tr> 456 </tbody> 457 </table> 458 459 $ docker run --restart=always redis 460 461 This will run the `redis` container with a restart policy of **always** 462 so that if the container exits, Docker will restart it. 463 464 More detailed information on restart policies can be found in the 465 [Restart Policies (--restart)](/reference/run/#restart-policies-restart) 466 section of the Docker run reference page. 467 468 ## Adding entries to a container hosts file 469 470 You can add other hosts into a container's `/etc/hosts` file by using one or 471 more `--add-host` flags. This example adds a static address for a host named 472 `docker`: 473 474 $ docker run --add-host=docker:10.180.0.1 --rm -it debian 475 $$ ping docker 476 PING docker (10.180.0.1): 48 data bytes 477 56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms 478 56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms 479 ^C--- docker ping statistics --- 480 2 packets transmitted, 2 packets received, 0% packet loss 481 round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms 482 483 Sometimes you need to connect to the Docker host from within your 484 container. To enable this, pass the Docker host's IP address to 485 the container using the `--add-host` flag. To find the host's address, 486 use the `ip addr show` command. 487 488 The flags you pass to `ip addr show` depend on whether you are 489 using IPv4 or IPv6 networking in your containers. Use the following 490 flags for IPv4 address retrieval for a network device named `eth0`: 491 492 $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` 493 $ docker run --add-host=docker:${HOSTIP} --rm -it debian 494 495 For IPv6 use the `-6` flag instead of the `-4` flag. For other network 496 devices, replace `eth0` with the correct device name (for example `docker0` 497 for the bridge device). 498 499 ### Setting ulimits in a container 500 501 Since setting `ulimit` settings in a container requires extra privileges not 502 available in the default container, you can set these using the `--ulimit` flag. 503 `--ulimit` is specified with a soft and hard limit as such: 504 `<type>=<soft limit>[:<hard limit>]`, for example: 505 506 $ docker run --ulimit nofile=1024:1024 --rm debian ulimit -n 507 1024 508 509 > **Note:** 510 > If you do not provide a `hard limit`, the `soft limit` will be used 511 > for both values. If no `ulimits` are set, they will be inherited from 512 > the default `ulimits` set on the daemon. `as` option is disabled now. 513 > In other words, the following script is not supported: 514 > `$ docker run -it --ulimit as=1024 fedora /bin/bash` 515 516 The values are sent to the appropriate `syscall` as they are set. 517 Docker doesn't perform any byte conversion. Take this into account when setting the values. 518 519 #### For `nproc` usage: 520 521 Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to set the 522 maximum number of processes available to a user, not to a container. For example, start four 523 containers with `daemon` user: 524 525 526 docker run -d -u daemon --ulimit nproc=3 busybox top 527 docker run -d -u daemon --ulimit nproc=3 busybox top 528 docker run -d -u daemon --ulimit nproc=3 busybox top 529 docker run -d -u daemon --ulimit nproc=3 busybox top 530 531 The 4th container fails and reports "[8] System error: resource temporarily unavailable" error. 532 This fails because the caller set `nproc=3` resulting in the first three containers using up 533 the three processes quota set for the `daemon` user.