修复部署:数据卷属主是 root,平台用户写不进数据库
Docker 新建数据卷时属主是 root,而平台用普通用户(APP_UID)运行,SQLite 打不开数据库, 新容器反复退出。compose 加一个启动前只运行一次的 init-data(root 把 /data 交给平台用户), Dockerfile 里也预先建好属于平台用户的 /data。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6096992507
commit
d6bcd11fb4
2 files changed
+17
No files matched your search
@@ -40,6 +40,8 @@ ENV APP_ROOT=/app \
|
|||||||
TZ=Asia/Shanghai \
|
TZ=Asia/Shanghai \
|
||||||
PORT=3000 \
|
PORT=3000 \
|
||||||
DOTNET_CLI_TELEMETRY_OPTOUT=1
|
DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
|
# 数据目录(数据卷挂在这里)属于运行平台的用户,新建的数据卷会继承这个属主
|
||||||
|
RUN mkdir -p /data && chown "$APP_UID" /data
|
||||||
# 镜像自带的非 root 用户
|
# 镜像自带的非 root 用户
|
||||||
USER $APP_UID
|
USER $APP_UID
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|||||||
@@ -1,10 +1,25 @@
|
|||||||
# 部署:先在 .env 里写好 TEACHER_PASSWORD(参考 .env.example),再 docker compose up -d
|
# 部署:先在 .env 里写好 TEACHER_PASSWORD(参考 .env.example),再 docker compose up -d
|
||||||
# HTTPS 由 Nginx Proxy Manager 负责,它在 npm_proxy 网络里转发到 iot-sim:80;步骤见 deploy/README.md
|
# HTTPS 由 Nginx Proxy Manager 负责,它在 npm_proxy 网络里转发到 iot-sim:80;步骤见 deploy/README.md
|
||||||
services:
|
services:
|
||||||
|
# 启动前把数据卷交给平台用户(Docker 新建数据卷时属主是 root,平台用普通用户运行,写不进去)
|
||||||
|
init-data:
|
||||||
|
image: iot-sim:latest
|
||||||
|
# 和 app 同一个镜像(构建有缓存,不会重复构建);写上 build,新服务器上就不会去 Docker Hub 拉这个镜像
|
||||||
|
build: .
|
||||||
|
user: root
|
||||||
|
command: ["sh", "-c", "chown -R \"$$APP_UID\" /data"]
|
||||||
|
volumes:
|
||||||
|
- data:/data
|
||||||
|
restart: "no"
|
||||||
|
networks: [default]
|
||||||
|
|
||||||
app:
|
app:
|
||||||
image: iot-sim:latest
|
image: iot-sim:latest
|
||||||
build: .
|
build: .
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
init-data:
|
||||||
|
condition: service_completed_successfully
|
||||||
environment:
|
environment:
|
||||||
# 老师账号(只有一个);学生账号由老师在网页上导入名单
|
# 老师账号(只有一个);学生账号由老师在网页上导入名单
|
||||||
TEACHER_USERNAME: ${TEACHER_USERNAME:-admin}
|
TEACHER_USERNAME: ${TEACHER_USERNAME:-admin}
|
||||||
|
|||||||
Reference in new issue
Block a user