How to dockerize a Sanic App?

I’d like to use Sanic for deploying a MicroService at my workplace.
Since we use Docker + Poetry, I needed to make a “slightly” different Dockerfile than the one suggested in this repo.
Before going to the actual machine that will host everything, I was trying to test the docker build and run process on my windows machine.
This is the Dockerfile that I’ve written

FROM continuumio/anaconda3



RUN apt-get update && apt-get install -y --fix-missing gcc mono-mcs

RUN apt-get install -y --fix-missing make

RUN apt-get install -y --fix-missing libpq-dev

# System deps: 
RUN pip install "poetry==$POETRY_VERSION"

# Copy only requirements to cache them in docker layer
COPY poetry.lock pyproject.toml /code/

# Project initialization:
RUN poetry config virtualenvs.create false \
&& poetry install $(test "$YOUR_ENV" == production && echo "--no-dev") --no-interaction --no-ansi

# Creating folders, and files for a project:
COPY . /code


ENTRYPOINT ["python3", "./"]

While it correctly builds, when I do the run, it tells me this message

(base) C:\Users\Gianmarco\Desktop\EPICS\AI\Progetti\Dummy\PoCAI>docker run pocai
[2020-07-15 16:35:23 +0000] [1] [INFO] Goin' Fast @ http://localhost:8071
[2020-07-15 16:35:23 +0000] [1] [ERROR] Unable to start server
Traceback (most recent call last):
  File "/opt/conda/lib/python3.7/site-packages/sanic/", line 886, in serve
   http_server = loop.run_until_complete(server_coroutine)
 File "/opt/conda/lib/python3.7/asyncio/", line 583, in run_until_complete
   return future.result()
 File "/opt/conda/lib/python3.7/asyncio/", line 1385, in create_server
   % (sa, err.strerror.lower())) from None
OSError: [Errno 99] error while attempting to bind on address ('::1', 8071, 0, 0): cannot assign 
requested address
[2020-07-15 16:35:23 +0000] [1] [INFO] Server Stopped

And I can’t honestly understand what is going on. Am I, perhaps, forced to deploy with something like gunicorn?

Sanic’s starter has been written in the following way

def run_app(sanic_app: Sanic) -> None:
    Utility function to run the sanic application during development.
    :param sanic_app: the Sanic application to run.
        host=config("HOST", cast=str),
        port=config("PORT", cast=str)

Real quick look, I suspect the issue is the Sanic server host.

::1 as a loopback address is generally a problem for setting Sanic inside a container. Try setting it to To capture any traffic coming through Docker.

Or change it to just “::” which is the ipv6 equivalent - if the container is ipv6 routable and you are ONLY using ipv6. is generally safer because it is often interpreted as both “” and “::”