Docker构建报错:无法计算缓存键,请求排查解决
Docker构建报错:文件找不到的解决方案
问题核心原因
- COPY指令路径错误:Docker构建时仅能访问构建上下文(执行
docker build时指定的目录)内的文件,直接引用宿主机绝对路径会导致文件找不到,这是报错的直接原因。 - WORKDIR配置错误:容器内不存在宿主机的
/Users/asklipios/Desktop/dockerable路径,应设置为Apache容器默认的网页目录。 - 命令拼写与配置错误:
CMD里的httdp是拼写错误,且httpd镜像自带启动命令;ENV port = 5000格式错误,修改端口需调整Apache配置。 - 构建与运行命令混淆:
docker run是运行容器的命令,构建镜像需用docker build。
修正步骤
1. 修正Dockerfile
将dock/Dockerfile内容替换为:
FROM httpd:2.4.57 # 设置容器内工作目录为Apache默认网页根目录 WORKDIR /usr/local/apache2/htdocs/ # 从构建上下文复制index.html到容器网页目录 COPY index.html . # (可选)如需将Apache监听端口改为5000,取消下方注释 # RUN sed -i 's/Listen 80/Listen 5000/g' /usr/local/apache2/conf/httpd.conf # 暴露端口(默认80,改端口后对应写5000) EXPOSE 80 # 使用httpd镜像自带的前台启动命令 CMD ["httpd-foreground"]
2. 正确执行构建命令
在dockerable目录下执行(指定构建上下文为当前目录,Dockerfile路径为dock/Dockerfile):
docker build -t asklipios/example:1.0 -f dock/Dockerfile .
3. 正确运行容器
默认80端口映射宿主机5000端口:
docker run -d -p 5000:80 asklipios/example:1.0
若修改了容器内端口为5000,命令改为:
docker run -d -p 5000:5000 asklipios/example:1.0
关键说明
- 构建上下文:
docker build最后的.代表将当前目录作为构建上下文,此时Docker能访问dockerable下的所有文件(包括index.html)。 - Apache默认配置:httpd镜像默认将网页放在
/usr/local/apache2/htdocs/,监听80端口,无需额外配置即可运行静态页面。
内容的提问来源于stack exchange,提问作者Asklipios Dimoglou
相关产品推荐
相关产品推荐

