连接到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 /标准输出,但是,如果我明白你的需要,在这种情况下,你会得到从标准输出混合多个标准输出。