问题描述
在使用Docker构建镜像的过程中遇到了问题。他想要通过从”scratch”开始,添加Ubuntu Bionic、Nginx、Angular等层次,最终构建出一个包含应用程序UI代码和主题资源的镜像。他的Docker CLI位于本地笔记本电脑上,而Docker引擎位于VPS服务器上。他已经通过设置DOCKER_HOST
变量实现了从本地连接到VPS上的Docker引擎。用户的Dockerfile如下所示:
# 指定基础镜像为scratch
FROM scratch
# 添加层次,包括Ubuntu 18.04和Nginx
ADD docker pull ubuntu:focal-20201008 /
在尝试构建镜像时,他遇到了以下错误:
$ docker build --tag abui .
Sending build context to Docker daemon 104.2MB
Step 1/2 : FROM scratch --->
Step 2/2 : ADD docker pull ubuntu:focal-20201008 /
ADD failed: stat /var/lib/docker/tmp/docker-builder302666646/docker: no such file or directory
他不明白为什么无法添加Ubuntu镜像。
解决方案
请注意以下操作可能涉及版本差异及修改前做好备份。
用户的问题涉及到Dockerfile中的ADD
指令以及对Ubuntu镜像的使用。以下是解决问题的步骤:
方案1:使用RUN
替代ADD
根据评论中的建议,用户可以尝试使用RUN
指令来执行docker pull
命令,而不是使用ADD
指令。ADD
用于将文件从构建环境复制到镜像中,而RUN
用于在镜像构建过程中执行命令。以下是修改后的Dockerfile示例:
# 指定基础镜像为Ubuntu 18.04
FROM ubuntu:focal-20201008
# 执行docker pull命令获取Ubuntu镜像
RUN docker pull ubuntu:focal-20201008
# 添加其他层次(Nginx、Angular、主题资源等)
# ...
方案2:从Ubuntu镜像开始构建
另一种更简单的方法是直接从Ubuntu镜像开始构建,而不是从scratch
开始。这样可以避免混淆ADD
和docker pull
的概念。以下是修改后的Dockerfile示例:
# 指定基础镜像为Ubuntu 18.04
FROM ubuntu:focal-20201008
# 添加其他层次(Nginx、Angular、主题资源等)
# ...
这种方法更直接,从OS镜像开始构建也是合理的。
请根据实际需求选择其中一种解决方案。在修改Dockerfile后,可以使用docker build
命令重新构建镜像。如果遇到问题,请查看Docker官方文档或相关资源,以确保正确理解和使用Docker的构建过程。
正文完