目标:多阶段的 Dockerfile
的其中一个步骤发生错误时,可以用这个方法除错比较方便
情境
FROM node:16.18.1 as builderWORKDIR /usr/appCOPY ./package*.json ./RUN npm installCOPY ./ ./COPY src srcRUN npm run build --output-path=./dist/ --prodFROM nginxCOPY --from=builder /usr/app/dist/ /var/www/htmlWORKDIR /var/www/html
使用以下指令製作 image 时
docker build -t mylaptop/frontend .
npm run build
的那一个步骤出错了
除错方法
可以先修改 Dockerfile
,把出错的那一个步骤以及以下的步骤都先注解掉,这样个以保证可以把做到一半的 image 做出来:
FROM node:16.18.1 as builderWORKDIR /usr/appCOPY ./package*.json ./RUN npm installCOPY ./ ./COPY src src# RUN npm run build --output-path=./dist/ --prod# FROM nginx# COPY --from=builder /usr/app/dist/ /var/www/html# WORKDIR /var/www/html
製作作到一半的 image
docker build -t mylaptop/frontend .
之后可以用这个指令进入到 shell
docker run -it mylaptop/frontend bash
进入到 shell 之后就可以比较方便的尝试各种方法来重现错误,以及尝试各种方式除错
最终的找到的错误
最后找到了是这个部份有错
https://stackoverflow.com/questions/55313610/importerror-libgl-so-1-cannot-open-shared-object-file-no-such-file-or-directo
最终修改后的 Dockerfile
FROM node:16.18.1 as builderWORKDIR /usr/appCOPY ./package*.json ./RUN npm installCOPY ./ ./COPY src src# 需要加以下这一行RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -yRUN npm run build --output-path=./dist/ --prodFROM nginxCOPY --from=builder /usr/app/dist/ /var/www/htmlWORKDIR /var/www/html