androiddockerdocker-composevirtual-machinehyperledger-sawtooth

java.net.SocketTimeoutException: failed to connect to /172.18.0.1 (port 8008) from /192.168.2.5 (port 46198) after 10000ms


I am building a mobile app running sawtooth SDK. I want to submit a transcation to my sawtooth network and I am getting this error : java.net.SocketTimeoutException: failed to connect to /172.18.0.1 (port 8008) from /192.168.2.5 (port 46198) after 10000ms

I am using a VM with Ubuntu 16.04 with bridged network configuartions and the IP of the VM is 192.168.2.8. I am setting up the sawtooth network with docker using docker-compose following the official instructions found here. This is the yaml file :


services:

  settings-tp:
    image: hyperledger/sawtooth-settings-tp:1.0
    container_name: sawtooth-settings-tp-default
    depends_on:
      - validator
    entrypoint: settings-tp -vv -C tcp://validator:4004

  intkey-tp-python:
    image: hyperledger/sawtooth-intkey-tp-python:1.0
    container_name: sawtooth-intkey-tp-python-default
    depends_on:
      - validator
    entrypoint: intkey-tp-python -vv -C tcp://validator:4004

  xo-tp-python:
    image: hyperledger/sawtooth-xo-tp-python:1.0
    container_name: sawtooth-xo-tp-python-default
    depends_on:
      - validator
    entrypoint: xo-tp-python -vv -C tcp://validator:4004

  validator:
    image: hyperledger/sawtooth-validator:1.0
    container_name: sawtooth-validator-default
    expose:
      - 4004
    ports:
      - "4004:4004"
    # start the validator with an empty genesis batch
    entrypoint: "bash -c \"\
        sawadm keygen && \
        sawtooth keygen my_key && \
        sawset genesis -k /root/.sawtooth/keys/my_key.priv && \
        sawadm genesis config-genesis.batch && \
        sawtooth-validator -vv \
          --endpoint tcp://validator:8800 \
          --bind component:tcp://eth0:4004 \
          --bind network:tcp://eth0:8800 \
        \""

  rest-api:
    image: hyperledger/sawtooth-rest-api:1.0
    container_name: sawtooth-rest-api-default
    ports:
      - "8008:8008"
    depends_on:
      - validator
    entrypoint: sawtooth-rest-api -C tcp://validator:4004 --bind rest-api:8008

  shell:
    image: hyperledger/sawtooth-all:1.0
    container_name: sawtooth-shell-default
    depends_on:
      - rest-api
    entrypoint: "bash -c \"\
        sawtooth keygen && \
        tail -f /dev/null \
        \""

My Host Computer is running Windows 10 Pro with IP 192.168.2.6 The IP on my mobile phone is 192.168.2.5 My container has this IP: 172.18.0.1. I understand that If I want them to communicate they need to be in the same network and I tried to change the containers IP, but I had no luck. Are there any suggestions on how I can fix this? thanks.


Solution

  • With this piece of code from your configuration

      rest-api:
        ...
        ports:
          - "8008:8008"
    

    Docker maps host's port 8008 to container's 8008. That means the container is listening on host's 8008. So you just need to connect to 192.168.2.8:8008, no need to mess with routing or anything.