两者都将能够在容器中执行命令。两者都可以分离容器。
那么docker exec和docker attach之间的真正区别是什么?
有一个提交PR添加到文档中:
注意: 此命令(attach)不适用于在容器中运行新进程。请参阅:docker exec。
attach
docker exec
回答“ Docker。如何在运行的容器(run -d)中获取bash \ ssh ? ”阐明了区别:
run -d
(docker> = 1.3)如果使用docker attach, 则只能使用shell的一个实例 。 因此,如果我们想使用容器外壳的新实例打开新终端,我们只需要运行docker exec 如果docker容器是使用/bin/bash命令启动的,则可以使用attach访问它,如果不是,则需要 执行 命令以在容器内创建bash实例exec。
(docker> = 1.3)如果使用docker attach, 则只能使用shell的一个实例 。 因此,如果我们想使用容器外壳的新实例打开新终端,我们只需要运行docker exec
docker attach
如果docker容器是使用/bin/bash命令启动的,则可以使用attach访问它,如果不是,则需要 执行 命令以在容器内创建bash实例exec。
/bin/bash
exec
如本期所述:
Attach不是在容器中运行额外的东西,而是用于附加到正在运行的进程。 “ docker exec”专门用于在已启动的容器中运行新事物,无论是外壳还是其他进程。
相同的问题添加:
尽管attach名称不明确,尤其是由于LXC命令lxc-attach(更类似于docker exec <container> /bin/sh,但特定于LXC),但它确实具有将您真正地附加到Docker启动的进程的特定目的。 根据过程的不同 , 行为可能会有所不同 ,例如,附加到/bin/bash会给您一个shell,但是附加到redis- server就像您直接在没有守护进程的情况下直接启动redis。
lxc-attach
docker exec <container> /bin/sh