croc Docker & Self-Hosted Deployment

GitHub

Easily and securely send things from one computer to another :crocodile: :package:

39,706 stars Go Go 1 file ยท ~5,873 tokens #data-transfer#file-sharing#golang#pake#peer-to-peer#tcp#transfer
1. Pull Image (DOCKERHUB) docker pull schollz/croc:latest
2. Docker Run (1-Click Launch) docker run -d --name croc -p 8080:8080 --restart always schollz/croc:latest
3. Podman Run podman run -d --name croc -p 8080:8080 --restart always schollz/croc:latest
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/schollz/croc:latest
5. ORAS Pull (OCI Artifact) oras pull schollz/croc:latest
Dockerfile
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM golang:1.27-alpine AS builder

RUN apk add --no-cache git nodejs npm

WORKDIR /go/croc

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN npm ci --prefix web \
    && npm run embed --prefix web

ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
RUN if [ -n "$TARGETVARIANT" ]; then export GOARM="${TARGETVARIANT#v}"; fi \
    && CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \
       go build -buildvcs=false -trimpath -tags netgo,osusergo \
       -ldflags="-s -w -buildid=" -o /out/croc . \
    && CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \
       go build -buildvcs=false -trimpath -tags netgo,osusergo \
       -ldflags="-s -w -buildid=" -o /out/croc-web ./cmd/croc-web

FROM alpine:latest

EXPOSE 8080
EXPOSE 9009
EXPOSE 9010
EXPOSE 9011
EXPOSE 9012
EXPOSE 9013
EXPOSE 9014
EXPOSE 9015
EXPOSE 9016
EXPOSE 9017

COPY --from=builder /out/croc /out/croc-web /go/croc/croc-entrypoint.sh /

RUN mkdir -p /www/croc/storage \
    && chown -R nobody:nobody /www/croc

USER nobody

# Simple TCP health check with nc!
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD sh -c ' \
    P="${CROC_RELAY_PORTS:-${CROC_PORTS:-${CROC_PORT:-9009}}}"; \
    IFS=,; set -- $P; \
    for p in "$@"; do \
        nc -z -w 3 localhost "$p" || exit 1; \
    done'

ENTRYPOINT ["/croc-entrypoint.sh"]
CMD ["relay"]