刚开始接触docker-compose技术,今天烧了一下通过Dockerfile来启动容器。

        Dockerfile内容如下:

#基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/weilai/tomcat7:latest

#维护者信息
MAINTAINER peifei@126.com

#镜像操作命令
#RUN ......

#容器启动命令
CMD "sh /usr/local/tomcat7/bin/startup.sh"

        docker-compose.yml内容如下:

tomcat7:
  build: .
  volumes:
    - /media/root/DockerDisk/webapps:/usr/local/tomcat7/webapps
  ports:
    - "8080:8080"

        然后在终端中运行docker-compose up -d后经过了漫长的等待终于运行成功了。

        没想到虽然运行成功了,但是却没达到我想要的效果(我是想用已有的tomcat7镜像自动启动容器并启动里面的tomcat),生成了一个新的镜像,但却没有自动启动tomcat:


        这个镜像与下面那个镜像的内容是相同的,于是我就把新生成镜像给删除了。

        这时我再将docker-compose.yml里的内容修改回原来的基于image的方式:

tomcat7:
  image: registry.cn-hangzhou.aliyuncs.com/weilai/tomcat7:latest
  volumes:
    - /media/root/DockerDisk/webapps:/usr/local/tomcat7/webapps
  ports:
    - "8080:8080"

        这时再运行docker-compose up -d后却提示如下错误:


        这就奇怪了,明明我改为使用registry.cn-hangzhou.aliyuncs.com/weilai/tomcat7:latest作为镜像来源,为什么会提示镜像sha256:0564a791bac418289213f339afde48d87c8111dbcf908148b1668cf205f836f9不存在哪?

        经过一顿苦找,终于在国外的网站上发现了解决方案。原来是因为我删除镜像的方式不对,可通过如下方式解决:

        在终端中先运行docker ps -a命令,查看容器历史启动记录:


        上图中红框内的容器就是一开始通过docker-compose+Dockerfile生成的,于是在终端中执行如下命令:


        然后再执行docker-compose up -d后终于成功了:


       这下长记性了,如果是通过docker-compose编排出的镜像,应该还通过docker-compose rm来删除,这样就不会出现上述的问题了。

       参考网址:https://github.com/docker/compose/issues/1113

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐