正常的docker run启动**java:8u111-jdk**是java官方镜像,如下命令可以成功启动一个该镜像的容器: docker run --name test001 -idt java:8u111-jdk 以上命令创建的容器,可用docker exec -it test001 /bin/bash进入容器,执行我们所需的操作;
docker-compose启动失败这里写个最简单的docker-compose.yml,然后用docker-compse,内容如下: master: image: java:8u111-jdk 在此文件所在目录下执行docker-compose up -d启动容器,再执行docker ps -a查看容器状态,信息如下所示: root@rabbitmq:/usr/local/work/test# docker-compose up -dCreating test_master_1 ... doneroot@rabbitmq:/usr/local/work/test# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESbb433fe9984d java:8u111-jdk "/bin/bash" About a minute ago Exited (0) About a minute ago test_master_1 信息显示我们启动的容器状态为Exited (0) About a minute ago,也就是说虽然创建了容器,但是该容器并未正常运行;
控制终端缺失启动失败是因为缺失了控制终端的配置,这里有两种方式修复;
使用tty参数(推荐使用)修改docker-compose.yml,增加一个配置tty:true,如下: master: image: java:8u111-jdk tty: true 先执行docker-compose down将之前的容器删除,再执行docker-compose up -d启动,可以发现启动成功,并且可以成功进入容器进行操作: root@rabbitmq:/usr/local/work/test# docker-compose up -dCreating test_master_1 ... doneroot@rabbitmq:/usr/local/work/test# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf51debaa26ec java:8u111-jdk "/bin/bash" 2 seconds ago Up 2 seconds test_master_1root@rabbitmq:/usr/local/work/test# docker exec -it test_master_1 /bin/bashroot@f51debaa26ec:/# java -versionopenjdk version "1.8.0_111"OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
使用exec重新创建容器(不推荐)这种方式并不推荐,因为这样做虽然可以启动容器,但是只能重新创建一个容器,具体方法如下: - 使用docker-compose up -d命令启动后,由于没有tty:true的配置,容器就退出了;
- 这时候执行命令docker-compose run master /bin/bash,会创建一个容器,并且进入这个容器;
- 在当前电脑再打开一个控制台,执行docker ps命令,发现新建了一个容器,状态正常;
下载地址: Docker compose up -d与Docker restart的区别 Docker配置文件docker-compose.yml使用指南 |