- Add docker-entrypoint.sh that runs as root to fix mounted volume permissions - Creates required subdirectories (logs, users, packages) before app starts - Copies default config.js if missing - Drops to node user via su-exec before running the app - Update Dockerfile to use entrypoint and install su-exec - Update docker-compose.yml with UID/GID mapping and separate volume mounts - Wrap filesystem operations in try-catch to handle permission errors gracefully
21 lines
864 B
Docker
21 lines
864 B
Docker
FROM node:20-alpine
|
|
RUN apk add --no-cache --virtual=build-dependencies build-base git python3-dev py3-setuptools && \
|
|
apk add --no-cache yarn su-exec
|
|
WORKDIR /var/opt/hardlounge-src
|
|
ENV THELOUNGE_HOME /var/opt/hardlounge
|
|
COPY --chown=node:node package.json yarn.lock .
|
|
USER node
|
|
RUN yarn install
|
|
COPY --chown=node:node . .
|
|
RUN NODE_ENV=production yarn build && \
|
|
yarn link && \
|
|
yarn --non-interactive cache clean && \
|
|
ln -s /var/opt/hardlounge-src/index.js /var/opt/hardlounge-src/hardlounge
|
|
USER root
|
|
RUN apk del --purge build-dependencies && \
|
|
mkdir -p /var/opt/hardlounge/logs /var/opt/hardlounge/users /var/opt/hardlounge/packages && \
|
|
chown -R node:node /var/opt/hardlounge
|
|
COPY --chmod=755 docker-entrypoint.sh /docker-entrypoint.sh
|
|
EXPOSE 9000
|
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
|
CMD ["/var/opt/hardlounge-src/hardlounge", "start"] |