我用-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 exec -it my-container-name bash

与正在运行的容器持续交互。

其他回答

# docker exec -d container_id command 

Ex:

# docker exec -d xcdefrdtt service jira stop 

不幸的是,用docker run——ENTRYPOINT的参数来覆盖ENTRYPOINT是不可能实现这个目标的。

注意:你可以使用——ENTRYPOINT覆盖ENTRYPOINT设置,但是 这只能将二进制文件设置为exec(不会使用sh -c)。

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

启动已停止的现有容器

docker start <container-name/ID>

停止正在运行的容器

docker stop <container-name/ID>

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

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

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

docker start -ai <container-name/ID>

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

为了扩展katrmr的答案,如果容器由于错误而停止并且无法启动,则需要将其提交给一个映像。然后你可以在新镜像中启动bash:

docker commit [CONTAINER_ID] temporary_image
docker run --entrypoint=bash -it temporary_image

如果您试图运行shell脚本,则需要以bash方式运行它。

docker exec -it containerid bash -c /path/to/your/script.sh