java.net.SocketTimeoutException: 10000 毫秒后无法从 /192.168.2.5(端口 46198)连接到 /172.18.0.1(端口 8008)

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

我正在构建一个移动应用 运行 锯齿 SDK。我想向锯齿波网络提交交易,但出现此错误:java.net.SocketTimeoutException: failed to connect to /172.18.0.1 (port 8008) from /192.168.2.5 (port 46198) after 10000ms

我正在使用具有 Ubuntu 16.04 的虚拟机和桥接网络配置,虚拟机的 IP 是 192.168.2.8。我正在使用 docker-compose 设置 docker 的锯齿网络,遵循发现的官方说明 here。这是 yaml 文件:


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 \
        \""

我的主机是 运行 Windows 10 Pro,IP 192.168.2.6 我手机 phone 上的 IP 是 192.168.2.5 我的容器有这个 IP:172.18.0.1。我知道如果我想让他们进行通信,他们需要在同一个网络中,我试图更改容器 IP,但我没有运气。关于如何解决这个问题有什么建议吗?谢谢。

使用您配置中的这段代码

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

Docker 将主机的端口 8008 映射到容器的 8008。这意味着容器正在侦听主机的 8008。因此您只需要连接到 192.168.2.8:8008,无需弄乱路由或任何东西。