Docker构建镜像时未同步本地更新文件,--no-cache等操作均失效
解决方案
第一步:确认构建上下文路径正确
执行docker build前先在当前命令行窗口执行ls ./html/(Windows环境执行dir .\html\),确认你修改的文件确实位于当前工作目录的html文件夹下,且文件内容为更新后的版本,避免修改了其他路径下的文件导致构建时引用了旧文件。第二步:确认Dockerfile指令规范
Dockerfile指令官方要求大写,将你现有Dockerfile中的小写copy改为大写COPY,避免部分旧版Docker引擎对小写指令识别异常:FROM nginx:1.15.8-alpine # config COPY ./nginx.conf /etc/nginx/nginx.conf COPY ./html/ /usr/share/nginx/html/第三步:排查.dockerignore规则
检查当前构建目录下的.dockerignore文件,确认是否存在忽略html/目录或你修改的对应文件的规则,若有则删除对应规则后重新构建。第四步:确认是否为缓存导致的假象
很多时候文件已经成功更新到容器内,只是nginx或浏览器的缓存导致你看到的是旧版本,可通过以下方式验证:- 启动容器后执行
docker ps获取运行容器的ID,随后执行以下命令查看容器内对应文件的内容:docker exec -it <你的容器ID> cat /usr/share/nginx/html/你修改的文件名 - 如果容器内文件已经是更新后的版本,说明是缓存问题:
- 浏览器端按
Ctrl+Shift+R(Mac系统按Cmd+Shift+R)强制刷新忽略缓存访问 - 测试环境可修改nginx配置,添加静态资源禁用缓存规则,避免后续重复出现该问题:
location ~* \.(html|js|css|json|png|jpg)$ { expires -1; add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate"; }
- 浏览器端按
- 启动容器后执行
内容的提问来源于stack exchange,提问作者Jobasha
相关产品推荐
相关产品推荐

