0

I am trying to deploy a dockerized python (nameko) application.

Everything works as expected to the point where I am trying to access one of the modules via GET method. There I receive a very cryptic error:

...
File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 347,
in setup conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_QUICKACK, True)

AttributeError: 'tuple' object has no attribute 'setsockopt'

I know for a fact that my code is not the problem because it is already up and running on a staging machine with no problems (at least of that kind).

The Dockerfile I am using looks like this (and does work mind you!):

FROM python:3.5

EXPOSE 8000

CMD ["./run.sh"]

RUN adduser --uid 1000 --disabled-password --gecos '' --home /home/devuser devuser

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    libxml2-dev \
    zlib1g-dev \
    libssl-dev \
    libxslt1-dev \
    netcat && \
    pip install --upgrade pip && \
    rm -rf /var/lib/apt/lists/* \
    rm -f /var/cache/apt/archives/*.deb

COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt

COPY . /app

RUN chown devuser.devuser -R .
USER devuser

I did nothing different from my staging machine so I do wonder...

John Moutafis
  • 22,254
  • 11
  • 68
  • 112

1 Answers1

1

This is a symptom of a bug in nameko, caused by a change in the eventlet library.

The solution is to upgrade to nameko 2.8.3, which pins the version of eventlet to be installed to the range 0.16.1 - 0.22.0.

snakecharmerb
  • 47,570
  • 11
  • 100
  • 153