You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Ubuntu容器报错:exec: "executable": executable file not found in $PATH: unknown

Docker Compose部署Ubuntu容器报错:exec: "executable": executable file not found in $PATH: unknown

我来帮你拆解下这个问题的根源,再给你一套能直接解决问题的配置方案:

问题到底出在哪?

你遇到的这个错误,本质是容器启动时找不到能持续运行的前台可执行进程,结合你的配置来看,主要有三个小问题:

  1. Docker Compose的build配置写错了:你直接写build: ./Dockerfile,Compose会误以为这个文件是构建上下文目录(而不是指定Dockerfile的路径),导致镜像构建过程异常,最终启动时找不到正确的执行文件
  2. Dockerfile没指定常驻前台进程:Ubuntu官方镜像默认的启动命令是bash,但如果没开启tty和标准输入,bash会直接退出;而且你需要确保rsh服务启动后,容器能一直保持运行状态
  3. 安装命令的语法小疏漏:你的RUN命令里,rsh-redone-client应该是和服务端一起作为安装包的,换行和逻辑拼接有点小问题

修正后的完整配置

1. 调整Dockerfile

我们需要搞定安装、启动rsh服务,同时让容器保持前台运行:

FROM ubuntu:20.04

# 安装rsh组件,同时处理时区交互问题
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y \
    rsh-redone-server rsh-redone-client && \
    # 清理缓存减小镜像体积
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 启动rsh服务,然后用bash挂住容器(确保前台运行)
CMD ["sh", "-c", "/usr/sbin/rshd && exec bash"]

2. 修正Docker Compose文件

要解决build配置问题,同时开启tty保持会话:

version: "3.8"

services:
  server:
    container_name: server
    build:
      context: .  # 构建上下文设为当前目录
      dockerfile: Dockerfile  # 明确指定Dockerfile路径
    tty: true  # 分配伪终端,支持tty会话
    stdin_open: true  # 保持标准输入打开,避免bash直接退出
    networks:
      - lurdo

networks:
  lurdo:
    name: lurdo

3. 扩展:部署三个独立的Ubuntu容器

如果要启动三个分别在Docker里的Ubuntu机器,直接复制服务块就行:

version: "3.8"

services:
  server1:
    container_name: server1
    build:
      context: .
      dockerfile: Dockerfile
    tty: true
    stdin_open: true
    networks:
      - lurdo

  server2:
    container_name: server2
    build:
      context: .
      dockerfile: Dockerfile
    tty: true
    stdin_open: true
    networks:
      - lurdo

  server3:
    container_name: server3
    build:
      context: .
      dockerfile: Dockerfile
    tty: true
    stdin_open: true
    networks:
      - lurdo

networks:
  lurdo:
    name: lurdo

验证方法

  1. 把上面两个文件放在同一个目录下
  2. 执行构建并启动容器:
docker-compose up -d --build
  1. 进入任意容器验证rsh服务是否正常运行:
docker exec -it server1 bash
# 查看rshd进程是否存在
ps aux | grep rshd

这样就能解决你遇到的“executable找不到”的错误,同时满足三个Ubuntu容器运行rsh服务并保持tty会话的需求。

备注:内容来源于stack exchange,提问作者Gabriel Lüders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:23:08