I'm new to Docker and I'm puzzled about why I can't start a stopped container in interactive mode if I didn't use the -it flag when I first ran it. I asked my professor about this, and they said it's not possible but didn't explain why. Can someone clarify this for me?
5 Answers
Think about how Docker saves those settings. When you first run a container, it saves those flags in a static config file that doesn't change. If you didn't allocate a TTY or open stdin at the start, the settings just aren't there. My advice is to remove the container and create a new one with `-it`. Containers are meant to be disposable anyway!
I've been experimenting too. For instance, I ran `docker run python`, saw it stop, and then tried `docker run -it -d python bash` to get an interactive shell. It worked, but I can't do the same with the earlier command since `-it` wasn't set. It’s like the container remembers that initial setting!
Can you share the specific commands you're using and what you're expecting to happen? Generally, the answer is that you can't do it that way because it wasn't designed that way. Containers are intended to be disposable, so if you need to change something, it's better to just create a new container with the settings you need.
Once the container is running, you can attach to it using `docker exec -it `. The reason you can't start it interactively after the fact is that the `-it` option is only applied at startup. If you didn't start with that, it's too late to change it. That's what the exec command is for – to execute commands in a running container.
So replacing `start` with `exec` is all I need to do to interact with it later?
You actually can't start a container in interactive mode because the `start` command doesn't support that. However, if you start the container normally, you can use `docker exec` to run commands interactively later on if you need to.

Thanks for the explanation! So am I right in understanding that using `-it` overrides the default CMD in the Dockerfile and replaces it with a shell like bash, which allows for interaction until I exit?