【问题标题】:Connecting to a specific shell instance in a docker container?连接到 docker 容器中的特定 shell 实例?
【发布时间】:2017-01-06 18:57:56
【问题描述】:
假设我有一个正在运行的 docker 容器 my_container。我开始一个新的 shell 会话:
docker exec -it my_container bash
然后我启动一个进程(例如 Python 脚本),然后使用 cntrl-p 退出容器,然后使用 cntrl-q 以保持脚本在后台运行。如果我使用几个不同的脚本多次执行此操作,我如何重新连接到特定的 shell 实例,以便我可以从脚本中看到 std?如果我使用docker attach my_container,我总是被放置在我执行docker run 命令时启动的第一个shell 实例中。
【问题讨论】:
标签:
linux
bash
shell
docker
containers
【解决方案1】:
我通常做的是在第一个 shell 中启动tmux。然后在新窗口中启动任何其他进程。
虽然理论上可以这样做,但docker exec 还是有很多问题,最好还是暂时避免。
【解决方案2】:
这是一种简单的模式,但可能会有所帮助。而不是用您的脚本名称替换“echo”...”。
运行容器,然后直接使用 docker exec 运行脚本并将其输出重定向到不同的文件。
docker exec -ti containerId /bin/bash -c 'echo "Hello script1" > /var/log/1.log'
docker exec -ti containerId /bin/bash -c 'echo "Hello script2" > /var/log/2.log'
然后您可以通过 docker exec(uting) 其他一些命令来查看文件,例如 cat、grep、tail 或任何您想要的:
docker exec -ti containerId /bin/tail -f /var/log/1.log
docker exec -ti containerId /bin/tail -f /var/log/2.log
提醒你也可以使用
docker logs containerId
查看从容器中运行的命令重定向到 /dev/stdout 的输出,但是,如果我理解您的需要,在这种情况下,您将获得混合在标准输出中的许多脚本的输出。