Skip to content

编译

编译 docker

终端中运行 docker build -t go-judge -f Dockerfile.exec .

沙箱服务需要特权级别 docker 来创建子容器和提供 cgroup 资源限制。

编译沙箱终端

编译 go build ./cmd/go-judge-shell

运行 ./go-judge-shell,需要打开 gRPC 接口来使用。提供一个沙箱内的终端环境。

编译 Docker 镜像

go-judge 目录下使用下面的示例创建 Dockerfile ,然后运行 docker build -t go-judge . 构建。

dockerfile
FROM golang:latest AS build 

WORKDIR /go/judge

COPY go.mod go.sum /go/judge/

RUN go mod download -x

COPY ./ /go/judge

RUN go generate ./cmd/go-judge/version \
    && CGO_ENABLE=0 go build -v -tags grpcnotrace,nomsgpack -o go-judge ./cmd/go-judge 

FROM debian:latest

WORKDIR /opt

COPY --from=build /go/judge/go-judge /go/judge/mount.yaml /opt/

EXPOSE 5050/tcp 5051/tcp

ENTRYPOINT ["./go-judge"]
dockerfile
FROM golang:alpine AS build

WORKDIR /go/judge 

RUN apk update && apk add git

COPY go.mod go.sum /go/judge/

RUN go mod download -x

COPY ./ /go/judge

RUN go generate ./cmd/go-judge/version \
    && CGO_ENABLE=0 go build -v -tags grpcnotrace,nomsgpack -o go-judge ./cmd/go-judge

FROM alpine:latest

WORKDIR /opt

COPY --from=build /go/judge/go-judge /go/judge/mount.yaml /opt/

EXPOSE 5050/tcp 5051/tcp

ENTRYPOINT ["./go-judge"]