问题描述:该问题是在构建vue项目镜像的过程中出现的,详细报错如下
ADD failed: stat /var/lib/docker/tmp/docker-builder258037372/xx/xx/xx/default.conf: no such file or directory
错误原因:
出现这个问题的根本原因在要ADD源文件没有加载到上下文context中,或者加入的路径不对。使用docker build命令构建镜像的时候Dockerfile中ADD命令后的源文件取的是当前路径下的,比如default.conf就放在运行docker build命令的目录(实质上就是dockerfile存在路径)下,则ADD命令后应该使用相对路径,若使用绝对路径就会导致上下文路径不对报错。
# 构建镜像过程中ADD(或COPY)命令后的源文件(不得在Dockerfile文件存在目录的上级目录)会拼接到如下的上下文中
/var/lib/docker/tmp/docker-builderxxx/+源文件位置
本人在dockerfile文件中键入错误指令如下
#在目标文件存在目录下运行docker build命令,docker在运行ADD指令的时候会在/var/lib/docker/tmp/docker-builderxxx/xx/xx/xx/路径下找default.conf文件,而实际上default.conf文件不在这个路径下,真正的位置在 /var/lib/docker/tmp/docker-builderxxx/default.conf
ADD /xx/xx/xx/default.conf /etc/nginx/conf.d/
问题解决:
#使用dockerfile存在目录,要使用的源文件相对路径,比如dockerfile文件在/A路径下(前提条件),源文件a.conf也在/A路径下,则直接ADD a.conf ... 即可,若a.conf在/A/B路径下,则ADD指令后源文件位置应为/B/a.conf
ADD default.conf /etc/nginx/conf.d/
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。