Skip to content

Commit 5fc1abc

Browse files
authored
Update Dockerfile
1 parent 0ba29f2 commit 5fc1abc

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

Dockerfile

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 阶段1:基础镜像准备
2-
FROM node:18-alpine AS base
2+
FROM node:20-alpine AS base
33

44
# 设置工作目录
55
WORKDIR /app
@@ -8,10 +8,11 @@ WORKDIR /app
88
# RUN npm config set registry https://registry.npmmirror.com/
99

1010
# 安装必要的系统依赖(例如 CA 证书)
11-
RUN apk add --no-cache ca-certificates && update-ca-certificates
11+
RUN apk add --no-cache ca-certificates openssl && update-ca-certificates
1212

1313
ENV NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca"
1414
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
15+
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
1516

1617
# 阶段2:构建应用程序
1718
FROM base AS builder
@@ -20,28 +21,26 @@ WORKDIR /app
2021

2122
# 复制依赖文件
2223
COPY package.json yarn.lock ./
23-
RUN yarn config set cafile /etc/ssl/certs/ca-certificates.crt
2424

2525
# 配置镜像源
2626
ARG REGISTRY_LIST="https://registry.npmmirror.com/ https://registry.npmjs.org/ https://registry.yarnpkg.com/"
2727
ARG YARN_NETWORK_TIMEOUT="300000"
2828

29+
30+
RUN yarn config set cafile /etc/ssl/certs/ca-certificates.crt
31+
2932
# 多镜像源回退安装:开发依赖 + 构建所需
30-
RUN set -eux; \
31-
success=0; \
33+
RUN --mount=type=cache,id=yarn-cache,target=/usr/local/share/.cache/yarn \
34+
set -eux; success=0; \
3235
for registry in $REGISTRY_LIST; do \
3336
echo "尝试 Yarn 镜像源: $registry"; \
3437
yarn config set registry "$registry"; \
3538
if yarn install --frozen-lockfile --network-timeout "$YARN_NETWORK_TIMEOUT"; then \
36-
echo "成功使用镜像源: $registry"; \
37-
success=1; \
38-
break; \
39+
echo "成功使用镜像源: $registry"; success=1; break; \
3940
else \
40-
echo "镜像源 $registry 失败,清缓存并尝试下一个..."; \
41-
yarn cache clean || true; \
41+
echo "镜像源 $registry 失败,清缓存并尝试下一个..."; yarn cache clean || true; \
4242
fi; \
43-
done; \
44-
if [ "$success" -ne 1 ]; then echo "所有镜像源尝试失败"; exit 1; fi
43+
done; test "$success" -eq 1
4544

4645
# # 安装所有依赖,包括开发依赖
4746
# RUN yarn install
@@ -60,27 +59,23 @@ ENV NODE_ENV=production
6059

6160
# 安装生产依赖
6261
# RUN yarn install --production --ignore-scripts --prefer-offline
63-
RUN set -eux; \
64-
success=0; \
62+
RUN --mount=type=cache,id=yarn-cache,target=/usr/local/share/.cache/yarn \
63+
set -eux; success=0; \
6564
for registry in $REGISTRY_LIST; do \
6665
echo "尝试 Yarn 镜像源(生产依赖): $registry"; \
6766
yarn config set registry "$registry"; \
6867
if yarn install --frozen-lockfile --production --ignore-scripts --network-timeout "$YARN_NETWORK_TIMEOUT"; then \
69-
echo "成功使用镜像源(生产依赖): $registry"; \
70-
success=1; \
71-
break; \
68+
echo "成功使用镜像源(生产依赖): $registry"; success=1; break; \
7269
else \
73-
echo "镜像源 $registry 失败,清缓存并尝试下一个..."; \
74-
yarn cache clean || true; \
70+
echo "镜像源 $registry 失败,清缓存并尝试下一个..."; yarn cache clean || true; \
7571
fi; \
76-
done; \
77-
if [ "$success" -ne 1 ]; then echo "所有镜像源尝试失败"; exit 1; fi
72+
done; test "$success" -eq 1
7873

7974
# 清理 yarn 缓存
8075
RUN yarn cache clean --all || true
8176

8277
# 阶段3:构建最终的生产镜像
83-
FROM node:18-alpine
78+
FROM node:20-alpine
8479

8580
# 设置工作目录
8681
WORKDIR /app
@@ -107,6 +102,8 @@ ENV NODE_ENV=production
107102
ENV HOSTNAME="0.0.0.0"
108103
ENV PORT=13000
109104
ENV NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca"
105+
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
106+
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
110107

111108
# 暴露端口
112109
EXPOSE 13000

0 commit comments

Comments
 (0)