Dockerfile.govc 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Create a builder container
  2. # golang:1.18.0-buster amd64
  3. FROM golang@sha256:7d39537344486528f8cdb3bd8adb98ab7f0f4236044b6944fed8631da35a4ce5 AS build
  4. WORKDIR /go/src/app
  5. # Create appuser to isolate potential vulnerabilities
  6. # See https://stackoverflow.com/a/55757473/12429735
  7. ENV USER=appuser
  8. ENV UID=10001
  9. RUN adduser \
  10. --disabled-password \
  11. --gecos "" \
  12. --shell "/sbin/nologin" \
  13. --no-create-home \
  14. --uid "${UID}" \
  15. "${USER}"
  16. # Create a new tmp directory so no bad actors can manipulate it
  17. RUN mkdir /temporary-tmp-directory && chmod 777 /temporary-tmp-directory
  18. ###############################################################################
  19. # Final stage
  20. FROM scratch
  21. # Allow container to use latest TLS certificates
  22. COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
  23. # Copy over appuser to run as non-root
  24. COPY --from=build /etc/passwd /etc/passwd
  25. COPY --from=build /etc/group /etc/group
  26. # Copy over the /tmp directory for golang/os.TmpDir
  27. COPY --chown=appuser --from=build /temporary-tmp-directory /tmp
  28. # Copy application from external build
  29. COPY govc /govc
  30. # Run all commands as non-root
  31. USER appuser:appuser
  32. # session cache, etc
  33. ENV GOVMOMI_HOME=/tmp
  34. # Set CMD to application with container defaults
  35. CMD ["/govc"]