问题描述
我是刚接触docker的小白,今天试着用dockerfile 构建一个tomcat镜像 结果在docker run 镜像时 报错
/bin/sh: /usr/local/tomcat/bin/startup.sh: No such file or directory
我的dockerfile 文件内容如下: 请高手指点一下。谢谢
# tomcat## VERSION 1.0# 使用centos作为基准镜像FROM centosMAINTAINER lilin# 使用root用户USER rootADD ./jdk-8u111-linux-x64.rpm /rootADD ./tomcat /usr/local#set environment variableENV JAVA_HOME /root/jdk-8u111-linux-x64ENV PATH $JAVA_HOME/bin:$PATH# 设置Tomcat7初始化运行,SSH终端服务器作为后台运行ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -F /usr/local/tomcat/logs/catalina.out# 对外(其他容器)开放8080端口EXPOSE 88
问题解答
回答1:拥有dockerfile 不一定就有镜像文件。 你可以通过 docker build -t ${tagName} . 来构建image文件。 然后再通过镜像文件创建CONTAINER, 最终能够运行的是你的container。 对于你当前的例子你可以通过如下命令完成上述过程:
sudo docker build -t mytomcat .sudo docker run -p 8080:8080 mytomcat //在这里你可以加上特定参数回答2:
在自己编写Dockerfile之前,最好先实践一次Dockerfile的构建过程。按自己的逻辑,通过基础镜像创建并进入容器,把想要在Dockerfile中写入的命令自己先执行一遍,看看是否存在问题,并解决这些问题,之后汇总所有命令写成Dockerfile。而不是直接纸上谈兵写出一个Dockerfile出来。
这里错误以及很明显了,Tomcat的启动脚本/usr/local/tomcat/bin/startup.sh不存在,所以容器不能启动起来。请先自己在容器中实践一次Tomcat的搭建,看看Tomcat应该怎样启动,启动缺少哪些问题,把所有问题解决了,自己搭建的Tomcat能跑起来了,再把这些东西写成Dockerfile。空写Dockerfile看似很厉害很节约实践,其实很纯很浪费时间。

