在连接到保持容器运行的 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 方法可以使容器保持运行?
我知道,我可以运行不同的 bash 实例并使用它 docker exec -it test bash
。但更一般地说,有没有办法连接到在 Docker 容器中运行的进程?
有时保存在容器内运行的进程的 session 很有用。
解决方案
感谢 user2915097
指出缺少的 -i
标志。
所以现在我们可以拥有持久的 bash session 。例如,让我们设置一些 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!
一切正常!
正如我在我的评论用例中指出的那样,可以运行一些交互式 shell,如 bash
、octave
、ipython
Docker 容器保留所有历史记录、导入、变量和临时设置
通过重新附加到同一实例。
最佳答案
你的容器正在运行,它还没有结束,如你所见
- 它出现在
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
你可以测试
关于linux - 无法附加到运行 Docker 容器的 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625255/