当前位置: 首页 > 知识库问答 >
问题:

Docker:在dockerfile内启动tmux会话?

葛骏
2023-03-14

遇到一个问题,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

共有1个答案

云啸
2023-03-14

这是层的问题:

这是你的工作代码

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脚本。

示例entrypoint可以是:

#!/bin/bash
# entrypoint.sh

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

exec "$@"
  • Add executable permissions for your entrypoint.sh:
    chmod +x entrypoint.sh
  • Then you need to copy and execute it in Dockerfile \
    COPY ./entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    

    在docker映像中启动多个程序是不好的做法。你正在失去码头工人的主要优势,即分离。

    然而,官方文件对你的问题说了一句话:https://docs.docker.com/config/containers/multi-service_container/

    我真的很喜欢这样做(当我必须)与监督。这是一个小程序来管理你的程序。

    • Docker图层:什么是Docker图像“图层”
    • Docker入口点:https://docs.docker.com/engine/reference/builder/#entrypoint/dockerfile_best-实践/
    • 监督员:http://supervisord.org/

 类似资料:
  • 我正在docker容器中运行一个简单的spring boot应用程序。在启动时,是否从或应用程序将始终在以下时间点挂起: 这里有一个问题,我只能在数字海洋(1CPU,1GB MEM)的Ubuntu 14.04盒子上重现这个,即使它在容器中运行。在我的本地机器上,一切都运行良好。 Dockerfile文件: 我尝试过的事情 给JVM更多内存(占机器总数的75%) 按这里建议的方式停止库 我能接触到的

  • 安装到Ubuntu容器中需要运行/etc/init.d/amh-start才会启动, 把/etc/init.d/amh-start放到dockerfile中的cmd 运行容器启动完程序容器会自动关闭

  • 本文向大家介绍Docker使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下 编写 Dockerfile 以 express 自动创建的目录为例,目录结构如下: 在项目目录下新建 Dockerfile 文件 FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此

  • 主要内容:指令详解什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 使用 Dockerfile 定制镜像 这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,将在下一节中介绍,这里你只要知道构建的流程即可。 1、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/s

  • 我成功地在ubuntu 18.04上安装了docker和nvidia-docker,我从NVIDIA的GPU云中提取了这个图像 用这个命令运行它 例如,容器给了我一个shell提示,它似乎可以工作 导致 它看到了我脆弱的gpu。我尝试用这个命令运行jupyter 但我明白了 我知道Jupyter安装在容器里因为当我打字的时候 我得到 打字 给予 在连接到容器的主机目录中,我有几个笔记本 但似乎什么

  • 我有以下系统脚本: 运行命令:systemctl start/stop hub工作正常。我还使用systemctl启用集线器创建了符号链接。为什么我的服务在我重新启动整个笔记本电脑后没有启动?我遵循了docker指南,以便Docker在重新启动时启动,但由于某种原因我的容器没有启动。我的脚本中缺少一个字段吗? 我正在使用ExecStart,“/home/hub/hub.sh”脚本的命令是: 重新启