正常的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 -d Creating test_master_1 ... done root@rabbitmq:/usr/local/work/test# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb433fe9984d 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 -d Creating test_master_1 ... done root@rabbitmq:/usr/local/work/test# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f51debaa26ec java:8u111-jdk "/bin/bash" 2 seconds ago Up 2 seconds test_master_1 root@rabbitmq:/usr/local/work/test# docker exec -it test_master_1 /bin/bash root@f51debaa26ec:/# java -version openjdk 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中启动镜像失败的几种解决方法的文章就介绍到这了,更多相关docker-compose 启动镜像失败内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!