【发布时间】: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+p、Ctrl+q
然后我们可以停止并重启容器
$ docker stop test
$ docker start test
现在我们可以附加到同一个bash 实例并检查我们的别名
$ docker attach test
root@3534cbe1e994:/# test
Hello, world!
一切正常!
正如我在评论用例中指出的那样,可以在 Docker 容器中以 bash、octave、ipython 的形式运行一些交互式 shell,只保留所有历史记录、导入、变量和临时设置
通过重新附加到同一个实例。
【问题讨论】:
标签: linux bash shell docker containers