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