docker exec はコンテナ内で新たなプロセスを実行します。
# docker run -d -it --name cont1 centos:7 # docker exec cont1 /bin/ls -l
/bin/bash などの対話コマンドを実行する際は -it オプションをつけます。
# docker exec -it cont1 /bin/bash
[root@3fb3d4ba646d /]# コンテナ内の /bin/bash のプロンプトとなる
[root@3fb3d4ba646d /]# ls -l
[root@3fb3d4ba646d /]# exit
#
-w (--workdir) オプションは、プロセスのワークディレクトリを指定します。
# docker exec -it -w /tmp cont1 /bin/bash
docker attach は、コンテナプロセス(PID=1のプロセス)に、標準入出力をアタッチします。
# docker run -d -it --name cont1 centos:7
# docker attach cont1
[root@3fb3d4ba646d /]# コンテナの PID=1 のプロセスにアタッチする
アタッチしたプロセスからデタッチするには、デタッチキー (通常は Ctrl-P Ctrl-Q) を押します。
[root@3fb3d4ba646d /]# Ctrl-P Ctrl-Q #
アタッチした状態で Ctrl-D を押したり exit を実行すると、コンテナプロセス自体が終了し、コンテナが停止状態になります。
[root@3fb3d4ba646d /]# exit # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3fb3d4ba646d centos:7 "/bin/bash" 18 minutes ago Exited (137) 5 seconds ago cont1