1

I am trying to test my Quart application (pager) that connects to a MySQL instance in a docker container called master-db, but after a few retries I get a hypercorn error:

pager    | Traceback (most recent call last):
pager    |   File "/usr/local/bin/hypercorn", line 8, in <module>
pager    |     sys.exit(main())
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/__main__.py", line 267, in main
pager    |     run(config)
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/run.py", line 34, in run
pager    |     worker_func(config)
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/asyncio/run.py", line 187, in asyncio_worker
pager    |     _run(
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/asyncio/run.py", line 229, in _run
pager    |     loop.run_until_complete(main(shutdown_trigger=shutdown_trigger))
pager    |   File "/usr/local/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
pager    |     return future.result()
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/asyncio/run.py", line 69, in worker_serve
pager    |     sockets = config.create_sockets()
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/config.py", line 177, in create_sockets
pager    |     insecure_sockets = self._create_sockets(self.bind)
pager    |   File "/usr/local/lib/python3.9/site-packages/hypercorn/config.py", line 240, in _create_sockets
pager    |     sock.bind(binding)
pager    | socket.gaierror: [Errno -2] Name does not resolve
pager exited with code 1

The code works locally and has been fully tested, but I don't know where I have gone wrong :(

The docker-compose file is:

  version: "3.8"

  networks:
    localdev:
      driver: bridge

  services:
    master-db:
      image: mysql:8.0
      container_name: master-db
      command: --default-authentication-plugin=mysql_native_password
      restart: always
      ports:
        - "4000:3306"
      environment:
        MYSQL_ROOT_PASSWORD: password_for_stackoverflow
      volumes:
        - ./database/docker:/etc/mysql/conf.d
      networks:
        - localdev

    pager:
      build:
        context: .
        dockerfile: Dockerfile.pager
      container_name: pager
      ports:
        - "2020:2020"
      networks:
        - localdev
      depends_on:
        - master-db

Docker.pager:

FROM python:3-alpine
RUN pip install --upgrade pip
RUN pip install hypercorn
RUN pip install mysql-connector
RUN pip install quart
COPY src/common /app/common
COPY src/pager /app/pager
WORKDIR /app
CMD ["hypercorn", "pager:app", "--bind", "'0.0.0.0:2020'"]
Swatcat
  • 73
  • 6
  • 21
  • 57

1 Answers1

0

The problem is not that you can’t connect to the MySQL instance, the problem is that Hypercorn is trying to listen on a socket and failing.

CMD ["hypercorn", "pager:app", "--bind", "'0.0.0.0:2020'"]

Have you tried removing the single quotes from the bind parameter?

CMD ["hypercorn", "pager:app", "--bind", "0.0.0.0:2020"]

Jim
  • 72,985
  • 14
  • 101
  • 108