如何在Docker容器中运行tmux?

6

我有一些在P2实例上运行的Docker容器。 过去我在P2实例中运行tmux并在其中运行Docker容器。 之后,我使用

docker exec -it 

为了进入正在运行的Docker容器,我想避免上述方法,并希望能够在现有容器中运行tmux。
tmux new -s <some name>

没有任何作用。


1
没有其他方法可以不使用 docker exec 进入正在运行的容器。也许您想解释一下为什么需要 tmux,以及您的最终目标是什么。 - Sathyajith Bhat
你是否只想在容器中运行 tmux 服务器,然后使用本地的 tmux 客户端连接到会话? - chepner
@SathyajithBhat “没有办法不使用docker exec进入正在运行的容器” - 这是不正确的。你可以通过SSH登录它。请参考moebius的回答。 - MrR
3个回答

6

我猜您想要通过tmux远程连接到运行的docker容器。为了实现这一点,您需要在容器内运行一个ssh服务器,并使用ssh附加到tmux会话。例如:

  • Create the container image with ssh and tmux installed. The Dockerfile might look like this:

    FROM ubuntu:latest
    RUN apt-get update && \
      apt install -y tmux && \
      apt install -y openssh-server && \
      service ssh start && \
      tmux new -s mysesh
    EXPOSE 22/tcp
    
  • Run the container, and port forward the ssh port:

    docker run -it -d -p 8654:22 <image name>
    
  • Attach to the tmux session:

    ssh user@<hostname> -p 8654 -t "tmux a -t mysesh"
    

注意: tmux 会话是针对用户的,因此请确保用户存在于容器中,并且在容器内作为该用户启动tmux 会话。


1
你应该能够通过卷暴露tmux服务器套接字,而不是运行一个ssh实例。 - chepner
@chepner,这是一个很好的建议 - 但是我自己在尝试中遇到了麻烦。从快速查看中可以看出,这可能并不容易(https://superuser.com/questions/358943/is-sharing-a-tmux-sockets-between-hosts-possible)。你能成功地使它工作吗? - moebius
啊,还没有。我没有太多时间去玩它,而我所花费的一点时间都在摸索Docker本身。 - chepner

4
如果容器中已经运行了 tmux,那么只需简单的执行 docker attach container_name 命令即可。(文档.)

1
它如何知道是否附加到tmux或其他进程? - Dims
1
这应该是正确的答案(符合最佳实践);已点赞。 - solr

1

在 Docker 镜像中可能没有安装 tmux,您可以在连接到 Docker 容器后安装它。

sudo apt install tmux

然后你应该能够执行

tmux new -s <some name>

在 P3 机器上尝试过,运行良好。 参考:https://linuxize.com/post/getting-started-with-tmux/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接