Docker Compose部署Ubuntu容器报错:exec: "executable": executable file not found in $PATH: unknown
Docker Compose部署Ubuntu容器报错:exec: "executable": executable file not found in $PATH: unknown
我来帮你拆解下这个问题的根源,再给你一套能直接解决问题的配置方案:
问题到底出在哪?
你遇到的这个错误,本质是容器启动时找不到能持续运行的前台可执行进程,结合你的配置来看,主要有三个小问题:
- Docker Compose的build配置写错了:你直接写
build: ./Dockerfile,Compose会误以为这个文件是构建上下文目录(而不是指定Dockerfile的路径),导致镜像构建过程异常,最终启动时找不到正确的执行文件 - Dockerfile没指定常驻前台进程:Ubuntu官方镜像默认的启动命令是
bash,但如果没开启tty和标准输入,bash会直接退出;而且你需要确保rsh服务启动后,容器能一直保持运行状态 - 安装命令的语法小疏漏:你的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
验证方法
- 把上面两个文件放在同一个目录下
- 执行构建并启动容器:
docker-compose up -d --build
- 进入任意容器验证rsh服务是否正常运行:
docker exec -it server1 bash # 查看rshd进程是否存在 ps aux | grep rshd
这样就能解决你遇到的“executable找不到”的错误,同时满足三个Ubuntu容器运行rsh服务并保持tty会话的需求。
备注:内容来源于stack exchange,提问作者Gabriel Lüders
相关产品推荐
相关产品推荐

