这里咱们须要清楚,单独的dockerfile 文件,也是能够进行编译的,只不过,他依赖的环境是dockerdocker
命令windows
docker build -t 镜像名称:镜像版本 -f 须要执行dockerfile地址 docker编译的上下文的地址测试
以上面这个文件为例子,我在网上看的时候 ,编译命令是docker build -t myxxx:latest . 注意这里还有一个点ui
后面在window上面进行执行,一直报错code
很奇怪,我后面修改了dockerfile 里面的add 的路径,指向了windows 的实际jar地址get
实际地址:C:\code\pig4cloud\pig\pig-auth\target\pig-auth.jar 他仍是报错,docker 甚至给我拼接出来了这样的目录dockerfile
ADD failed: stat /var/lib/docker/tmp/docker-builder116102196/C:\code\pig4cloud\pig\pig-auth\target\pig-auth.jar: no such file or directory编译
开始仔细排查,网上找缘由。经测试。修改dockerfile 的add 为ADD target/pig-auth.jar ./ 而后执行docker build -t myxxx:latest . 成功,给我打包出来了,后面想了下,以为是 dockerfile 里面的参数 WORKDIR 定义了当前目录为这里test
因此相对路径为 target/pig-auth.jar ./ 这不是恰好,完美解释了,因而,我删除了WORKDIR 参数进行验证。从新打包,仍是成功了。。。。我靠。黑人问号?打包
因而接着查找资料,求助群里,群里的一位大手子给与了帮助。让我了解下 docker build -t XXX:XXX BUILD_CONTEXT
后面查找了资料才明白
这里的build 上下文(context) 就是那会的docker build -t myxxx:latest . 就是最后的这个点,是指当前目录
docker build 命令经过 Dockerfile 建立镜像时,会产生一个 build 上下文(context)。所谓的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路径中的文件的集合。在镜像 build 过程当中能够引用上下文中的任何文件
因此如今一切明白了把,我那会之因此写arget/pig-auth.jar ./ 运行成功,是由于,我那会在这个目录下用的 . 指的是当前目录。好了,咱们如今修改回去dockerfile文件,重写编写编译命令,进行尝试
docker build -t mqsx:latest -f C:\code\pig4cloud\pig\pig-auth\Dockerfile C:\code\pig4cloud\pig
好了,成功编译。 这里须要注意下,应为咱们这里,没用 . 当前目录,因此命令里面须要使用-f 指dockerfile 的文件路径