distroless icon indicating copy to clipboard operation
distroless copied to clipboard

"SyntaxError: Non-UTF-8 code starting with '\xa3' in file /venv/bin/uwsgi" error when trying to launch uWSGI

Open dgdevops opened this issue 3 years ago • 2 comments

Hello,

I have trying to use distroless image (python3) to run uWSGI application but the "SyntaxError: Non-UTF-8 code starting with '\xa3' in file /venv/bin/uwsgi" error causes the container to exit. The application is built as a part of a multi-stage docker build process that contains the following steps:

FROM debian:buster-slim AS build
RUN apt-get update && \
    apt-get install --no-install-suggests --no-install-recommends --yes python3-venv gcc libpython3-dev libc-dev python3-pip build-essential python3-dev && \
    python3 -m venv /venv && \
    /venv/bin/pip3 install --upgrade pip && \
    /venv/bin/pip3 install -U pip setuptools && \
    /venv/bin/pip3 install virtualenv virtualenvwrapper && \
    /venv/bin/pip3 install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

FROM build AS build-venv
COPY requirements.txt /requirements.txt
RUN /venv/bin/pip3 install --disable-pip-version-check -r /requirements.txt
RUN chmod +x /venv/bin/uwsgi

# Copy the virtualenv into a distroless image
FROM gcr.io/distroless/python3-debian10
COPY --from=build-venv /venv /venv
COPY . /app
WORKDIR /app
EXPOSE 8080
CMD ["/venv/bin/uwsgi", "app.ini"]

Troubleshooting steps taken:

  • Tested gcr.io/distroless/python3-debian9 image
  • Tested debian:stretch-slim image
  • Added RUN /venv/bin/uwsgi --help to the first build stage to see if the application works (it does perfectly)
  • Tried to use iconv to convert the uwsgi file to utf-8 format (same error)
  • Tried to replace the "app.ini" parameter with "--help" to isolate potential encoding issues with app.ini (same error)
  • Tried to install uWSGI from requirements.txt (uWSGI >= 2.0.19.1)
  • Tried to add # coding=utf8 to the first line of /venv/bin/uwsgi file (application error)

dgdevops avatar Jun 28 '21 09:06 dgdevops

Hi!

Using provided Dockerfile I have same error as you. When I tried to override ENTRYPOINT on distroless python with ENTRYPOINT ["/venv/bin/uwsgi", "--help"] then docker run returns with /venv/bin/uwsgi: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

Have you tried to override distroless ENTRYPOINT?

koperak avatar Jul 15 '21 10:07 koperak

Hello @koperak , Thank you for your response. In the end I tested a few other base images and python:3.7-buster AS builder turned out to be fully working. To fix the cannot open shared object file: No such file or directory error I added COPY actions in the Dockerfile to copy the libpcre.so.3, libxml2.so.2, libpython3.7m.so.1.0,libicui18n.so.63,libicuuc.so.63,libicudata.so.63 dependencies to the final container. Now the uWSGI works perfectly with distroless.

dgdevops avatar Jul 16 '21 09:07 dgdevops