【问题标题】:Can't attach to bash running the Docker container无法附加到运行 Docker 容器的 bash
【发布时间】:2018-06-04 05:56:09
【问题描述】:

无法附加到 bash 实例以保持容器运行。

要更详细。我在这里运行容器:

$ docker run -dt --name test ubuntu bash

现在它应该正在运行,而不是完成。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             
STATUS              PORTS               NAMES
f3596c613cfe        ubuntu              "bash"              4 seconds ago       Up 2 seconds                            test

在此之后,我试图附加到保持容器运行的 bash 实例。像这样:

$ docker attach test

运行这个命令我可以向标准输入写一些东西,但是没有结果。我不确定 bash 是否收到我输入的行。

还有其他方法可以让容器保持运行吗?

我知道,我可以运行不同的 bash 实例并使用它docker exec -it test bash。但更一般地说,有没有办法连接到在 Docker 容器中运行的进程?

有时保存在容器内运行的进程的会话会很有用。

解决方案

感谢user2915097 指出缺少的-i 标志。

所以现在我们可以进行持久的 bash 会话了。比如我们设置一些alias,在容器停止重启后重用。

$ docker run -itd --name test ubuntu bash

要附加到bash 实例只需运行

$ docker attach test
root@3534cbe1e994:/# alias test="Hello, world!"

要从容器中分离而不是停止容器,请按 Ctrl+pCtrl+q

然后我们可以停止并重启容器

$ docker stop test
$ docker start test

现在我们可以附加到同一个bash 实例并检查我们的别名

$ docker attach test
root@3534cbe1e994:/# test
Hello, world!

一切正常!

正如我在评论用例中指出的那样,可以在 Docker 容器中以 bashoctaveipython 的形式运行一些交互式 shell,只保留所有历史记录、导入、变量和临时设置 通过重新附加到同一个实例。

【问题讨论】:

    标签: linux bash shell docker containers


    【解决方案1】:

    你的容器正在运行,它还没有完成,你可以看到

    • 它出现在docker ps,所以它是一个正在运行的容器
    • 显示 n 秒

    你用-dt启动它,所以你想要它

    分离(对于 d) 分配一个 tty (for t)

    但不是交互式的,因为您不添加-i

    通常,您几乎总是一起提供-it,可能是-idt

    看到这个帖子

    When would I use `--interactive` without `--tty` in a Docker container?

    如果你想要 bash,我认为你应该添加 -i

    我不知道你为什么使用-d

    通常是

    docker run -it --rm --name=mytest ubuntu bash

    你可以测试

    【讨论】:

    • 谢谢,添加-i 解决了我的问题。分离的交互式容器的一个可能用例是具有持久会话。例如。具有所有历史记录和以前的别名的 bash 实例,而无需将它们放入 .bashrc。实际上,我将尝试使用这种技术来建立持久的 Octave 会话,因为它也是一个交互式 shell。
    【解决方案2】:

    容器的运行生命周期由其根进程确定,在您的示例中为 bash。当您使用 bash 作为进程启动 ubuntu 容器时,bash 会立即退出,因为它没有任何东西可以保持运行。这就是为什么容器会立即退出并且没有任何东西可以附加的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多