我用-d创建了一个容器,所以它不是交互式的。

docker run -d shykes/pybuilder bin/bash

我看到容器已经退出:

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES
d6c45e8cc5f0        shykes/pybuilder:latest   "bin/bash"          41 minutes ago      Exited (0) 2 seconds ago                        clever_bardeen

现在我想偶尔在机器上运行一些命令,然后退出。只是为了得到回应。

我试着启动机器。我试着连接。我以为我可以调用运行与容器,但这似乎不被允许。使用start似乎只是运行,然后迅速存在。

退出后,我想回到交互模式。

我试着:

docker attach d6c45e8cc5f0

但我明白:

2014/10/01 22:33:34 You cannot attach to a stopped container, start it first

但如果我启动它,它还是会退出。赶上22。我赢不了。


当前回答

所以我认为答案比上面许多误导性的答案更简单。

启动已停止的现有容器

docker start <container-name/ID>

停止正在运行的容器

docker stop <container-name/ID>

然后登录到容器的交互式shell

docker exec -it <container-name/ID> bash

在一个命令中启动一个现有容器并附加到它

docker start -ai <container-name/ID>

注意,这将在退出时停止容器。但通常情况下,您需要启动容器,在完成后附加并停止它。

其他回答

我想指出,上面的答案有点误导人。

执行docker run的问题是每次都会创建一个新的容器。然而,在某些情况下,我们希望重新访问旧容器或不占用新容器的空间。

(给定clever_bardeen是创建的容器的名称…)

在OP的情况下,通过执行以下命令确保docker映像首先运行:

docker start clever_bardeen

然后,使用以下命令执行docker容器:

docker exec -it clever_bardeen /bin/bash

Mac:

$ docker exec -it <container-name> sh

如果您想以root用户连接:

$ docker exec -u 0 -it <container-name> sh

我正在运行windows容器,我需要在docker容器中查看创建和复制的文件和文件夹。

为了做到这一点,我使用下面的docker entrypoint命令来获得在容器内运行或附加到容器的命令提示符。

ENTRYPOINT ["C:\\Windows\\System32\\cmd.exe", "-D", "FOREGROUND"]

这帮助我将命令提示符附加到容器,并使容器保持活动状态。:)

一个简单的解决方案为我解决了类似的问题:

docker run --interactive --tty <name_of_image>

这是我用上面的CDR LDN答案和我在这里找到的答案组合起来的答案。

下面的例子从一个镜像启动一个Arch Linux容器,然后使用pacman工具在该容器上安装git:

sudo docker run -it -d archlinux /bin/bash
sudo docker ps -l
sudo docker exec -it [container_ID] script /dev/null -c "pacman -S git --noconfirm"

仅此而已。