Dockerfile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # not using python:3.*-alpine cause glib-dev package depends on python3
  2. # https://pkgs.alpinelinux.org/package/v3.11/main/aarch64/glib-dev
  3. ARG BASE_IMAGE=alpine:3.11
  4. ARG SOURCE_DIR_PATH=/switchbot-mqtt
  5. ARG VIRTUALENV_PATH=$SOURCE_DIR_PATH/.venv
  6. FROM $BASE_IMAGE as build
  7. RUN apk add --no-cache \
  8. gcc \
  9. glib-dev \
  10. make \
  11. musl-dev \
  12. py3-virtualenv
  13. ARG SOURCE_DIR_PATH
  14. RUN mkdir $SOURCE_DIR_PATH \
  15. && chown nobody $SOURCE_DIR_PATH
  16. USER nobody
  17. ARG VIRTUALENV_PATH
  18. RUN virtualenv --no-site-packages $VIRTUALENV_PATH
  19. ENV PATH=$VIRTUALENV_PATH/bin:$PATH
  20. WORKDIR $SOURCE_DIR_PATH
  21. RUN pip install --no-cache-dir pipenv
  22. COPY --chown=nobody . $SOURCE_DIR_PATH
  23. ARG SWITCHBOT_MQTT_VERSION=
  24. RUN SETUPTOOLS_SCM_PRETEND_VERSION=$SWITCHBOT_MQTT_VERSION pipenv install --deploy --verbose
  25. # workaround for broken multi-stage copy
  26. # > failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID ... cannot be mapped to a host ID
  27. USER 0
  28. RUN chown -R 0:0 $SOURCE_DIR_PATH
  29. FROM $BASE_IMAGE
  30. RUN apk add --no-cache \
  31. glib \
  32. python3 \
  33. tini \
  34. && find / -xdev -type f -perm /u+s -exec chmod -c u-s {} \; \
  35. && find / -xdev -type f -perm /g+s -exec chmod -c g-s {} \;
  36. #RUN apk add bluez-deprecated `# hcitool`
  37. USER nobody
  38. ARG SOURCE_DIR_PATH
  39. COPY --from=build $SOURCE_DIR_PATH $SOURCE_DIR_PATH
  40. ARG VIRTUALENV_PATH
  41. ENV PATH=$VIRTUALENV_PATH/bin:$PATH
  42. ENTRYPOINT ["tini", "--"]
  43. CMD ["switchbot-mqtt"]