3

I have built a RESTful API web service using Flask framework, Redis as main database, MongoDB as a backup store and Celery as task queue to store data into MongoDB in background

Then I dockerize my application using docker-compose. Here is my docker-compose.yml:

version: '3'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app
  redis:
    image: "redis:alpine"
    ports:
      - "6379:6379"
  mongo:
    image: "mongo:3.6.5"
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_DATABASE: syncapp

Here is my Dockerfile:

# base image
FROM python:3.5-alpine
MAINTAINER xhoix <145giakhang@gmail.com>

# copy just the requirements.txt first to leverage Docker cache
# install all dependencies for Python app
COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

# install dependencies in requirements.txt
RUN pip install -r requirements.txt

# copy all content to work directory /app
COPY . /app

# specify the port number the container should expose
EXPOSE 5000

# run the application
CMD ["python", "/app/app.py"]

After run command docker-compose up, the app server, Redis and Mongo server just run well. But when I use Postman or curl to call the API, for example http://127.0.0.1:5000/sync/api/v1.0/users, which should return JSON format of all users, but the result is Could not get any response: There was an error connecting to http://127.0.0.1:5000/sync/api/v1.0/users.

I have no idea why this happens. Thanks for any help and suggestion!

xHOIx
  • 73
  • 2
  • 8

2 Answers2

3

I found the cause of the issue:

After an hour debug, it turns out that I only need to change the app host to 0.0.0.0. Maybe when mapping port, docker default will be 0.0.0.0, since when I run command docker-compose ps, the PORTS column of each container has format 0.0.0.0:<port> -> <port>. I don't know this is the cause of the issue or not, but I did it and the problem is solved

xHOIx
  • 73
  • 2
  • 8
0

If operating system Linux then use :

ifconfig -a

If operating system Windows then use :

ipconfig /all

Then check the interface like docker or something with virtualization, and use the ipv4 or inet

Or Just use the docker command:

docker network inspect bridge

Then use the gateway ip on IPAM