连接到docker容器中的特定shell实例?

比方说,我有一个正在运行的docker容器my_container 。 我开始一个新的shell会话:

docker exec -it my_container bash

然后我启动一个进程(例如Python脚本),然后用cntrl-p cntrl-q退出容器,让脚本在后台运行。 如果我用几个不同的脚本做这个几个不同的时间,我如何重新连接到一个特定的shell实例,以便我可以看到我的脚本的标准? 如果我使用docker attach my_container ,那么当我docker run docker attach my_container docker run命令时,我总是将其放置在第一个shell实例中。

我通常做的是在第一个shell里面启动tmux 。 然后在新窗口中启动任何其他进程。

虽然理论上可行,但docker exec仍然有许多问题,现在总是避免它。

这是一个微不足道的模式,但可能会有所帮助。 用你的脚本名称代替“echo”…“。

运行容器,然后使用docker exec直接运行脚本,并将其输出redirect到不同的文件。

 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 

看到输出redirect到容器中运行的命令/ dev /标准输出,但是,如果我明白你的需要,在这种情况下,你会得到从标准输出混合多个标准输出。