# syntax=docker/dockerfile:1.4 ##### web FROM node:lts-alpine AS web WORKDIR /build ADD gui /build RUN --mount=type=cache,id=golang-1.19.5-alpine.3.16/var/cache/apk,target=/var/cache/apk \ sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \ && apk add gcc g++ zlib-dev nasm make autoconf automake libtool RUN echo "network-timeout 600000" >> .yarnrc \ && yarn config set registry https://registry.npm.taobao.org \ && yarn config set sass_binary_site https://cdn.npm.taobao.org/dist/node-sass -g \ && export NODE_OPTIONS=--openssl-legacy-provider \ && yarn cache clean && yarn && yarn build FROM golang:1.19.5-alpine3.16 as builder RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \ && go env -w GONOSUMDB=lab.threathunter.cn \ && go env -w GOPROXY=goproxy.threathunter.cn WORKDIR /build ADD . . COPY --from=web /build/dist internal/server/web RUN --mount=type=cache,id=golang-1.19.5-alpine.3.16/var/cache/apk,target=/var/cache/apk \ apk add gcc g++ libpcap-dev RUN --mount=type=cache,id=golang-1.19.5-alpine3.16/go/pkg/mod,target=/go/pkg/mod \ --mount=type=cache,id=golang-1.19.5-alpine3.16/root/.cache,target=/root/.cache \ go mod download RUN --mount=type=cache,id=golang-1.19.5-alpine3.16/go/pkg/mod,target=/go/pkg/mod \ --mount=type=cache,id=golang-1.19.5-alpine3.16/root/.cache,target=/root/.cache \ CGO_ENABLED=1 go build -a -ldflags '-w -s' -o /cmd FROM scratch as binary COPY --link --from=builder /cmd /cmd #################################### base #################################### FROM alpine:3.16 as image # set work directory WORKDIR /app # set noninteractive ENV DEBIAN_FRONTEND noninteractive ENV PATH="/app:${PATH}" # install zh_CN utf8 RUN --mount=type=cache,id=alpine-3.16/var/cache/apk,target=/var/cache/apk \ sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \ && apk add su-exec tzdata bash busybox tree libpcap COPY --link --from=binary /cmd /app/cmd COPY --link ./deploy/sys-root / RUN chmod +x /docker-entrypoint.sh /docker-cmd.sh /app/cmd VOLUME [ "/app/data", "/app/conf", "/app/logs" ] EXPOSE 20028 ENTRYPOINT [ "/docker-entrypoint.sh" ] CMD [ "/docker-cmd.sh" ]