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,无需弄乱路由或任何东西。
我正在构建一个移动应用 运行 锯齿 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,无需弄乱路由或任何东西。