skip to content
usubeni fantasy logo Usubeni Fantasy

docker 趣事

/ 4 min read

前提,我是个 docker 小白,这两天做前端容器化,写了个 Dockerfile:

FROM node:14.21.2-alpine
RUN mkdir -p app
COPY . app
WORKDIR app
RUN yarn
RUN npm run build:test1
FROM nginx
COPY --from=0 app/dist /usr/share/nginx/html
COPY nginx/conf /etc/nginx

但是跑到 npm run build:test1的时候,他就是报:

This relative module was not found:
* ./src/main.js in multi ./src/main.js

开发环境是这样,测试环境是这样,本地想开虚拟机却发现网络老连不上(这里也浪费了很多时间,且没解决问题),接着在咕咕搜了好久 docker This relative module was not found,啥收获都没有,点进去全都是路径写错的,大小写写错的,我寻思我也没有,之前主机发布的时候一直在 Linux 系统构建也没问题。

昨晚深夜醒来,突然灵感就来了,难道跟 WORKDIR 有关?他全都以 WORKDIR 为标准所以这个路径找不到?

今天回公司又试了几次,各种交换顺序,各种 pwd 各种 ls,发现并不是 WORKDIR 的问题。

接着把矛头指向 COPY,该不是你这家伙没复制全吧,但是我以前也是这么用的,加上查文档也全都是说文件夹全复制的……但是我最后 ls 认真看了一下确实没 src 文件夹。

我无能狂怒,为啥会这样!!!

直到,我百无聊赖地加了一句:

COPY ./src ./src

™ 的,破案了!居然告诉我 .dockerignoresrc 屏蔽了……我立即看一眼:

.dockerignore
static/
src/
build/

GitLens 显示这是三年前一个同事的修改,确实,这是一个我一年前才接手的项目,而且因为我所在的部门就是运维相关的部门,所以他们当初建项目的时候就想着容器化也不是什么奇怪的事,但是奇葩就奇葩在没人会想到他居然可以直接把 src/ ignore 了,估计他当时是直接本地 build 了然后直接把构建文件上传到代码库去直接容器化吧……

总之,就是一个小小的 .dockerignore,再加上我对 docker 不熟悉,导致我没信心我写的 Dockerfile 没问题,硬是让我对容器化报 This relative module was not found 的问题调研了整整一天……

这个故事告诉我们,如果关键字咕咕搜不到解决方案,很可能是出现了什么奇葩的事情。(手动狗头)

评论组件加载中……