This commit is contained in:
2025-11-01 19:31:37 +08:00
parent cf8d4f1735
commit a192e5f434
2 changed files with 36 additions and 12 deletions

View File

@@ -109,17 +109,32 @@ FROM base
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true"
ENV SPRING_PROFILES_ACTIVE=prod
# 创建应用用户和目录
RUN groupadd -g 1001 app \
&& useradd -u 1001 -g app -s /bin/sh -d /app -M app \
&& mkdir -p /app/data/upload \
&& mkdir -p /app/data/temp \
&& mkdir -p /app/data/unzip \
&& mkdir -p /app/data/images \
&& mkdir -p /app/data/reports \
&& mkdir -p /app/data/elasticsearch \
&& mkdir -p /app/logs \
&& chown -R app:app /app
# 创建应用用户和目录(兼容 Debian/Ubuntu 与 Alpine/busybox 工具集)
RUN set -eux; \
if command -v groupadd >/dev/null 2>&1; then \
# Debian/Ubuntu/一般 GNU 工具链
groupadd -g 1001 app; \
useradd -u 1001 -g app -s /bin/sh -d /app -M app; \
elif command -v addgroup >/dev/null 2>&1; then \
# adduser/addgroup 工具链:区分 --gid 可用与否
if addgroup --help 2>&1 | grep -q -- '--gid'; then \
addgroup --gid 1001 app; \
adduser --disabled-password --shell /bin/sh --uid 1001 --ingroup app app; \
else \
addgroup -g 1001 app; \
adduser -D -s /bin/sh -u 1001 -G app app; \
fi; \
else \
echo 'no user/group management tools found' >&2; exit 1; \
fi; \
mkdir -p /app/data/upload \
/app/data/temp \
/app/data/unzip \
/app/data/images \
/app/data/reports \
/app/data/elasticsearch \
/app/logs; \
chown -R app:app /app
# 设置工作目录
WORKDIR /app
@@ -144,4 +159,4 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
EXPOSE 9081
# 启动应用不使用tini直接启动
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

9
operations-log.md Normal file
View File

@@ -0,0 +1,9 @@
# 操作留痕Codex
- 时间2025-11-01 19:35UTC+8
- 动作:修改 Dockerfile 创建应用用户命令
- 位置Dockerfile运行阶段“创建应用用户和目录”
- 变更:将原使用 addgroup/adduser 的写法替换为兼容 Debian/Ubuntu 与 Alpine 的健壮分支逻辑(优先使用 `groupadd/useradd`,回退到 `addgroup/adduser` 并按是否支持 `--gid` 区分参数)。
- 目的修复构建阶段报错“Option g is ambiguous (gecos, gid, group)”,避免不同基础镜像工具链参数差异导致失败。
- 工具apply_patch补丁写入
- 结果:补丁应用成功,建议以 `docker build --no-cache` 重新构建验证。