docker使用dockerfile构建镜像遇到的问题

docker使用dockerfile构建镜像,构建成功了,但是dockerfile里面的指令ENV指令没有执行,COPY ./docker-demo.jar /tmp/app.jar指令执行了,但是没有文件夹中没有app.jar文件。

镜像创建情况

img

dockerfile文件内容

指定基础镜像

FROM ubuntu:16.04

配置环境变量,JDK的安装目录

ENV JAVA_DIR=/usr/local

拷贝jdk和java项目的包

COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

安装JDK

RUN cd $JAVA_DIR
&& tar -xf ./jdk8.tar.gz
&& mv ./jdk1.8.0_144 ./java8

配置环境变量

ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

暴露端口

EXPOSE 8090

入口,java项目的启动命令

ENTRYPOINT java -jar /tmp/app.jar

@ada;
回答一下

  • 这篇博客: docker打包java的jar包镜像基础入门---从一个空的虚拟机到镜像搭建全流程中的 3.DockerFile 体系结构(保留字指令) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • FROM:基础镜像,当前新镜像是基于哪个镜像的
    
    MAINTAINER:镜像维护者的姓名和邮箱地址
    
    RUN:容器构建时需要运行的命令
    
    EXPOSE:当前容器对外暴露出的端口
    
    WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
    
    ENV:用来在构建镜像过程中设置环境变量
    
    ADD:将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包
    
    COPY:类似 ADD,拷贝文件和目录到镜像中。(COPY src dest 或 COPY ["src","dest"])
    
    VOLUME:容器数据卷,用于数据保存和持久化工作
    
    CMD:指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
    
    ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
    
    ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发
    

你这个copy指令是想拷贝本地文件到docker中吗?你使用的相当路径执行的,这个文件是否在dockerfile文件所在目录下,可以考虑使用绝对路径试试。

COPY要注意dockerfile的执行的所在的文件夹为工作目录,如此的话,本地中的.就会存在特殊意义了