Docker构建Ubuntu镜像失败解决方案

50次阅读
没有评论

问题描述

在使用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开始。这样可以避免混淆ADDdocker pull的概念。以下是修改后的Dockerfile示例:

# 指定基础镜像为Ubuntu 18.04
FROM ubuntu:focal-20201008
# 添加其他层次(Nginx、Angular、主题资源等)
# ...

这种方法更直接,从OS镜像开始构建也是合理的。

请根据实际需求选择其中一种解决方案。在修改Dockerfile后,可以使用docker build命令重新构建镜像。如果遇到问题,请查看Docker官方文档或相关资源,以确保正确理解和使用Docker的构建过程。

正文完