Both will be able to execute commands in container. Both could detach the container.
So what is the real difference between docker exec and docker attach?
There was a commit PR which added to the doc:
Note: This command (attach) is not for running a new process in a container. See: docker exec.
attach
docker exec
The answer to "Docker. How to get bashssh inside runned container (run -d)?" illustrates the difference:
run -d
(docker >= 1.3) If we use docker attach, we can use only one instance of shell. So if we want to open new terminal with new instance of container's shell, we just need to run docker exec if the docker container was started using /bin/bash command, you can access it using attach, if not then you need to execute the command to create a bash instance inside the container using exec.
(docker >= 1.3) If we use docker attach, we can use only one instance of shell. So if we want to open new terminal with new instance of container's shell, we just need to run docker exec
docker attach
if the docker container was started using /bin/bash command, you can access it using attach, if not then you need to execute the command to create a bash instance inside the container using exec.
/bin/bash
exec
As mentioned in this issue:
Attach isn't for running an extra thing in a container, it's for attaching to the running process. "docker exec" is specifically for running new things in a already started container, be it a shell or some other process.
The same issue adds:
While attach is not well named, particularly because of the LXC command lxc-attach (which is more akin docker exec <container> /bin/sh, but LXC specific), it does have a specific purpose of literally attaching you to the process Docker started. Depending on what the process is the behavior may be different, for instance attaching to /bin/bash will give you a shell, but attaching to redis-server will be like you'd just started redis directly without daemonizing.
lxc-attach
docker exec <container> /bin/sh
2.1m questions
2.1m answers
60 comments
57.0k users