前提,我是个 docker 小白,这两天做前端容器化,写了个 Dockerfile:
但是跑到 npm run build:test1
的时候,他就是报:
开发环境是这样,测试环境是这样,本地想开虚拟机却发现网络老连不上(这里也浪费了很多时间,且没解决问题),接着在咕咕搜了好久 docker This relative module was not found
,啥收获都没有,点进去全都是路径写错的,大小写写错的,我寻思我也没有,之前主机发布的时候一直在 Linux 系统构建也没问题。
昨晚深夜醒来,突然灵感就来了,难道跟 WORKDIR
有关?他全都以 WORKDIR
为标准所以这个路径找不到?
今天回公司又试了几次,各种交换顺序,各种 pwd
各种 ls
,发现并不是 WORKDIR
的问题。
接着把矛头指向 COPY
,该不是你这家伙没复制全吧,但是我以前也是这么用的,加上查文档也全都是说文件夹全复制的……但是我最后 ls
认真看了一下确实没 src
文件夹。
我无能狂怒,为啥会这样!!!
直到,我百无聊赖地加了一句:
™ 的,破案了!居然告诉我 .dockerignore
把 src
屏蔽了……我立即看一眼:
GitLens 显示这是三年前一个同事的修改,确实,这是一个我一年前才接手的项目,而且因为我所在的部门就是运维相关的部门,所以他们当初建项目的时候就想着容器化也不是什么奇怪的事,但是奇葩就奇葩在没人会想到他居然可以直接把 src/
ignore 了,估计他当时是直接本地 build 了然后直接把构建文件上传到代码库去直接容器化吧……
总之,就是一个小小的 .dockerignore
,再加上我对 docker 不熟悉,导致我没信心我写的 Dockerfile 没问题,硬是让我对容器化报 This relative module was not found
的问题调研了整整一天……
这个故事告诉我们,如果关键字咕咕搜不到解决方案,很可能是出现了什么奇葩的事情。(手动狗头)