2023-03-20

Docker compose dependant service ip and port is not accessible

I'm trying to run an integration service example(github here) with below docker compose file which has a mysql service as a dependency for the main service

version: '2'

  db:
    image: mysql:8.0
    cap_add:
      - SYS_NICE
    restart: always
    environment:
      - MYSQL_DATABASE=events
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=events
      - MYSQL_PASSWORD=events
    ports:
      - '3306:3306'
    volumes:
      - ./db/mysql:/var/lib/mysql

  webhooks_web:
    env_file:
      - .env
    environment:
      KAFKA_BROKER_LIST: kafka:9092
      KAFKA_GROUP_ID: events
      EVENT_TOPIC: events
      MYSQL_HOST: db
      MYSQL_DATABASE: events
      MYSQL_USER: events
      MYSQL_PASSWORD: events
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src/js/:/app/js/
      - ./src/public/:/app/public/
      - ./src/views/:/app/views/
      - ./index.js:/app/index.js
      - ./db:/app/db
      - ./tools:/app/tools
    ports:
      - 3000:3000
    command: ./tools/wait-for-it.sh db:3306 -t 60 --strict -- npm run dev
    depends_on:
      - db

This use the wait-for-it script to wait till mysql comes up. Script fails saying

wait-for-it.sh: timeout occurred after waiting 60 seconds for db:3306

My doubt is that the host name db doesn't get resolved into a ip. I'm not sure how this works but I checked the /etc/hosts file but that dns doesn't get added to there.

What is the problem here?

P.S - Log from the db service says it is ready to accept connections.

db_1            | 2023-03-19T09:32:50.788673Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
db_1            | 2023-03-19T09:32:51.340528Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
db_1            | 2023-03-19T09:32:51.340583Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
db_1            | 2023-03-19T09:32:51.343906Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1            | 2023-03-19T09:32:51.408233Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.32'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
db_1            | 2023-03-19T09:32:51.408208Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock

I can docker-compose exec db /bin/bash and use mysql -u events -p and log in to the server

My OS is Ubuntu 22.04 and docker version is 23.0.1, build a5ee5b1



No comments:

Post a Comment