Storm-WG / storm-stored

Storage daemon for Storm and other LNP/BP nodes - an embeddble microservice frontend for different storage backends
MIT License
6 stars 8 forks source link

Docker: stored doesn't seem to accept connection with IPv4 #2

Open louneskmt opened 2 years ago

louneskmt commented 2 years ago

I've been doing some tests with my Docker stack, and I've noticed that other daemons (rgbd and stormd) can't connect to stored RPC API using IPv4 (Docker hostnames). Full compose file.

  rgb-node:
    image: louneskmt/rgb-node:v0.8.0-rc.1
    init: true
    command:
      - -vvv
      - --chain=testnet
      - --storm=storm-node:64964
      - --store=storm-stored:60960
      - --data-dir=/var/lib/rgbd
    volumes:
      - ./data/rgb-node:/var/lib/rgbd
    expose:
      - 63963 # RGB RPC

  storm-stored:
    image: louneskmt/storm-stored:v0.8.0
    init: true
    command:
      - -vvv
      - --data-dir=/var/lib/stored
      - --rpc=0.0.0.0:90960
    volumes:
      - ./data/storm-stored:/var/lib/stored
    expose:
      - 60960

stored starts normally and opens the RPC API socket to 0.0.0.0:60960:

instance1-storm-stored-1  | stored: storage microservice
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG stored] CTL RPC socket 0.0.0.0:60960
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG stored] Starting runtime ...
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG stored::service] Opening RPC API socket 0.0.0.0:60960
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG stored::service] Opening database at /var/lib/stored/sled.db
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iterator] ordering before clearing tears: {0: 0}, max_header_stable_lsn: 0
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iterator] in clean_tail_tears, found missing item in tail: None and we'll scan segments {0: 0} above lowest lsn 0
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iterator] filtering out segments after detected tear at (lsn, lid) 2786
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iterator] hit max_lsn 2786 in iterator, stopping
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::snapshot] zeroing the end of the recovered segment at lsn 0 between lids 2787 and 524287
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::blob_io] gc_blobs removing any blob with an lsn above 2787
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::segment] SA starting with tip 524288 stable -1 free {}
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iobuf] starting log at recovered active offset 2787, recovered lsn 2787
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache::iobuf] starting IoBufs with next_lsn: 2787 next_lid: 2787
instance1-storm-stored-1  | [2022-07-17T10:33:29Z DEBUG sled::pagecache] load_snapshot loading pages from 0..38
instance1-storm-stored-1  | [2022-07-17T10:33:29Z INFO  stored::service] Stored runtime started successfully

rgbd tries to initialize the runtime connecting to the store service, but never succeeds:

instance1-rgb-node-1      | rgbd: RGB stash microservice
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgbd] CTL socket /var/lib/rgbd/ctl
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgbd] RPC socket 0.0.0.0:63963
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgbd] STORE socket storm-stored:60960
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgbd] STORM socket storm-node:64964
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgbd] Starting runtime ...
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG rgb_node::rgbd::service] Connecting to store service at storm-stored:60960
instance1-rgb-node-1      | [2022-07-17T10:33:29Z DEBUG store_rpc::client] Initializing runtime

If I change the configuration to use a socket file, it suddenly works as expected.

  rgb-node:
    image: louneskmt/rgb-node:v0.8.0-rc.1
    init: true
    command:
      - -vvv
      - --chain=testnet
      - --storm=storm-node:64964
      - --store=/var/lib/stored/store
      - --data-dir=/var/lib/rgbd
    volumes:
      - ./data/rgb-node:/var/lib/rgbd
      - ./data/storm-stored:/var/lib/stored
    expose:
      - 63963 # RGB RPC

  storm-stored:
    image: louneskmt/storm-stored:v0.8.0
    init: true
    command:
      - -vvv
      - --data-dir=/var/lib/stored
      - --rpc=/var/lib/stored/store
    volumes:
      - ./data/storm-stored:/var/lib/stored

Can this be due to the daemons not supporting hostnames? Or is it for sure an issue with Docker (or my Docker stack)?

dr-orlovsky commented 2 years ago

They do connect via IPv4 without docker - I use only that connection for in my dev process (not IPC). So I assume it is something related to docker networking

louneskmt commented 2 years ago

Do you know if it supports using hostnames instead of actual IPv4 addresses?

dr-orlovsky commented 2 years ago

No it does not - DNS are prohibited; only IPv4 and IPv6 addresses