【问题标题】: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 的输出,但是,如果我理解您的需要,在这种情况下,您将获得混合在标准输出中的许多脚本的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 2021-11-07
        相关资源
        最近更新 更多