Docker:在dockerfile内启动tmux会话?
遇到一个问题,Docker:在dockerfile内启动tmux会话?,docker,Docker,遇到一个问题,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.
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会话中运行,以便在映像运行时附加到该会话
在构建过程中,如何在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
Entrypoint是容器引导时运行的bash脚本
示例入口点可以是:
#/bin/bash
#entrypoint.sh
set-eu
tmux new-sfoo-d&&tmux ls
执行官“$@”
- 为entrypoint.sh添加可执行权限:
chmod+x入口点.sh
- 然后您需要在
\Dockerfile
COPY ./entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
supervisord
来做这件事(当我必须做的时候)。这是一个管理程序的小程序
工具书类
- Docker层:
- Docker入口点:
- 监督员: