52

I've used docker run -it to launch containers interactively and docker run -d to start them in background. These two options seemed exclusive. However, now I've noticed that docker run -dit (or docker run -itd) is quite common. So what is the difference? When -it is really needed together with -d?

techkuz
  • 3,608
  • 5
  • 34
  • 62
vehsakul
  • 1,118
  • 1
  • 10
  • 17
  • 5
    `-i` starts an interactive session and `-t` emulates a tty. But `-d` tells Docker to detach and run in the background. They don't really make sense together... – Dan Lowe Jan 29 '17 at 00:47
  • 2
    @DanLowe That's why I asked. It is used on [docker site](https://docs.docker.com/engine/reference/commandline/container_update/) and elsewhere. – vehsakul Jan 29 '17 at 00:50
  • Yeah you do have a point. I thought maybe it would change behavior of `docker attach` ... but I don't see any difference. Good question. – Dan Lowe Jan 29 '17 at 01:00

1 Answers1

61

Yes, sometimes, it's necessary to include -it even you -d

  1. When the ENTRYPOINT is bash or sh

    docker run -d ubuntu:14.04 will immediately stop, cause bash can't find any pseudo terminal to be allocated. You have to specify -it so that bash or sh can be allocated to a pseudo terminal.

     docker run -dit ubuntu:14.04
    
  2. If you want to use nano or vim with any container in the future, you have to specify -it when the image starts. Otherwise you'll get error. For example,

     docker run --name mongodb -d mongo
     docker exec -it mongodb bash
     apt-get update
     apt-get install nano
     nano somefile
    

    It will throw an error

    Error opening terminal: unknown.

Rafaf Tahsin
  • 7,652
  • 4
  • 28
  • 45