gpt4 book ai didi

Docker:在 dockerfile 中启动 tmux session ?

转载 作者:行者123 更新时间:2023-12-05 03:45:38 27 4
gpt4 key购买 nike

遇到 tmux 未在 docker 容器文件中初始化的问题。此外,人们将 tmux 附加到预先存在的容器中,也会造成搜索障碍。这不是我想要做的。

# in the dockerfile
FROM debian:latest
RUN apt-get install tmux
RUN tmux new -s foo -d
RUN tmux ls
_________________________

$: docker build .
...
> [8/8] RUN tmux ls:
#11 0.415 no server running on /tmp/tmux-0/default
------
executor failed running [/bin/sh -c tmux ls]: exit code: 1

我想做的是运行几个需要同时相互通信的“应用程序”。这个想法是为了避免使用 docker compose 来解决这个特定问题。

我可以轻松地将这两个命令作为后台进程运行。

但是,我宁愿让它们在 tmux session 中运行,我可以在图像运行时附加到该 session 中。

如何在构建过程中 在 docker 容器内启动 tmux

最佳答案

这是图层的问题:

此代码将完成您的工作。

FROM debian:latest
RUN apt-get update && apt-get install -y tmux
RUN tmux new -s foo -d && tmux ls

但这只能解决构建问题,不能解决您的问题。

你应该在入口点这样做,因为当层终止时 tmux 被杀死......

在每一层的构建过程中,您可以启动一些进程(您启动了 tmux)。图层构建完成后,所有在该特定图层中启动的进程都会被终止。

容器只是只读图像层之上的另一层,因此您需要在那里启动 tmux。

入口点是您在容器引导时运行的 bash 脚本。

示例入口点可以是:

#!/bin/bash
# entrypoint.sh

set -eu
tmux new -s foo -d && tmux ls

exec "$@"
  • 为您的 entrypoint.sh 添加可执行权限:
    chmod +x 入口点.sh
  • 然后需要在Dockerfile中复制执行\
    COPY ./entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]

另一种解决方案

在 docker 镜像中启动多个程序是不好的做法。您正在失去 docker 的主要优势,即分离。

但是,官方文档对您的问题说了一句话:https://docs.docker.com/config/containers/multi-service_container/

我真的很喜欢用 supervisord 来做(当我不得不这样做的时候)。这是一个管理程序的小程序。

引用资料

关于Docker:在 dockerfile 中启动 tmux session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65674604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com