Ubuntu容器启动失败求助:Docker-Compose配置后容器崩溃
问题分析与解决方案
首先要明确:你的容器并不是“崩溃”,而是正常退出(exit code 0就是明证)。Ubuntu官方镜像默认的启动命令是bash,当容器以非交互模式启动时,bash没有终端输入会立刻结束运行,主进程结束后Docker自然会停止容器,所以你会看到容器启动即退出,日志抓不到内容(EOF是因为容器已经退出,没有日志输出)。
下面分两种场景给你解决方案:
场景1:只是需要容器持续运行(用于后续进入容器操作)
修改你的docker-compose.yml,给容器指定一个持续运行的命令,比如tail -f /dev/null,这个命令会一直挂起,让容器保持运行状态:
version: '2' services: ubuntu: image: 'ubuntu:16.04' ports: - '22:22' command: tail -f /dev/null
启动后你可以用docker exec -it playground_ubuntu_1 bash进入容器执行操作。
场景2:需要启动SSH服务(映射22端口的目的应该是这个)
官方Ubuntu镜像默认没有安装openssh-server,所以直接映射22端口没用,需要先安装并配置SSH服务,让它作为容器的主进程前台运行。推荐用Dockerfile来构建自定义镜像:
- 新建一个
Dockerfile文件,内容如下:
FROM ubuntu:16.04 # 更新源并安装openssh-server RUN apt-get update && apt-get install -y openssh-server # 创建sshd运行所需的目录 RUN mkdir /var/run/sshd # 设置root密码(替换成你自己的密码) RUN echo 'root:your_secure_password' | chpasswd # 修改sshd配置,允许root登录 RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # 暴露22端口 EXPOSE 22 # 前台启动sshd,作为容器的主进程 CMD ["/usr/sbin/sshd", "-D"]
- 修改
docker-compose.yml,改为构建本地镜像:
version: '2' services: ubuntu: build: . ports: - '22:22'
然后执行docker-compose up -d启动容器,之后你就可以用ssh root@localhost(输入你设置的密码)连接容器了。
内容的提问来源于stack exchange,提问作者asosnovsky




