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