Не удается подключиться к узлу corda через ssh в docker

#docker #ssh #docker-compose #docker-swarm #corda

#docker #ssh #docker-compose #docker-swarm #corda

Вопрос:

При попытке подключиться к работающему узлу corda через ssh соединение зависало и закрывалось по таймауту. Может быть, кто-нибудь может с этим помочь? Похоже, некоторые проблемы с docker, поскольку узел работает нормально, просто не могу подключиться к нему через ssh.

 user@host:~$ ssh -v localhost -p 2222 -l users
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 2222.
debug1: connect to address 127.0.0.1 port 2222: Connection timed out
ssh: connect to host localhost port 2222: Connection timed out
  

Узел Corda запускается стеком докеров в swarm.

 user@host:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS
umifcjj1qutf        stack_users    replicated          1/1                 repository/node:latest   *:2222->2222/tcp, *:10006->10201/tcp
  

Определение службы.

 // docker-stack.yml
services:
    users:
        image: ${DOCKER_REGISTRY}/node:latest
        volumes:
            - users-persistance:/opt/corda/persistance:rw
        configs:
            -   source: users_config
                target: /etc/corda/node.conf
            -   source: users_certificate_nodekeystore
                target: /opt/corda/certificates/nodekeystore.jks
            -   source: users_certificate_sslkeystore
                target: /opt/corda/certificates/sslkeystore.jks
            -   source: users_certificate_truststore
                target: /opt/corda/certificates/truststore.jks
            -   source: users_add_node_info_1
                target: /opt/corda/additional-node-infos/nodeInfo-71FB94D0663EEB32054F04AA0F0554EA8AA2CA684CA9A75D2689F854BAC7C814
            -   source: users_add_node_info_2
                target: /opt/corda/additional-node-infos/nodeInfo-777DA369F066FE34BEDE3E6334A1006A4026A02DD76AFA798204BD015C9965DE
            -   source: users_network_parameters
                target: /opt/corda/network-parameters
        ports:
            - 10006:10201
            - 2222:2222
  

Обратите внимание, что все работает нормально, я имею в виду, что транзакции на этом узле выполняются нормально, но я не могу просто подключиться к узлу.

Интересным фактом является то, что при запуске узла с помощью docker-compose он работает нормально, я могу подключиться к узлу.

определение docker-compose.yml

 users:
    build:
      context: ./blockchain/node
      target: api_platform_node_development
    image: ${DOCKER_REGISTRY}/node:latest
    volumes:
      - ./blockchain/build/nodes/Users/node.conf:/etc/corda/node.conf
      - ./blockchain/build/nodes/Users/certificates:/opt/corda/certificates
      - ./blockchain/build/nodes/Users/logs:/opt/corda/logs
      - ./blockchain/build/nodes/Users/persistence:/opt/corda/persistence
      - ./blockchain/build/nodes/Users/cordapps:/opt/corda/cordapps
      - ./blockchain/build/nodes/Users/network-parameters:/opt/corda/network-parameters
      - ./blockchain/build/nodes/Users/additional-node-infos:/opt/corda/additional-node-infos
      - ./blockchain/build/nodes/Users/drivers:/opt/corda/drivers
    ports:
      - 10006:10201
      - 2222:2222
  

Версия Docker 19.03.12, сборка 48a66213fe

docker-compose версии 1.21.2, сборка a133471

версия docker-compose.yml: ‘3.4’

UPD: node.conf

 dataSourceProperties {
    dataSource {
        url="jdbc:h2:file:./persistence/persistence;DB_CLOSE_ON_EXIT=FALSE;WRITE_DELAY=0;LOCK_TIMEOUT=10000"
    }
}
detectPublicIp=false
devMode=false
myLegalName="O=Users,L=London,C=GB"
p2pAddress="users:10200"
rpcSettings {
    address="0.0.0.0:10201"
    adminAddress="0.0.0.0:10202"
}
security {
    authService {
        dataSource {
            type=INMEMORY
            users=[
                {
                    password=password
                    permissions=[
                        ALL
                    ]
                    user=users
                }
            ]
        }
    }
}
sshd {
    port=2222
}
  

UPD 2. Файл Dockerfile узла
Я использую стандартный corda/corda-zulu-java1.8-4.4 образ docker для узлов

 FROM corda/corda-zulu-java1.8-4.4 AS api_platform_node_development

FROM corda/corda-zulu-java1.8-4.4 AS api_platform_node_production

COPY --from=repository/blockchain_build:latest /usr/blockchain/src/build/nodes/Users/cordapps /opt/corda/cordapps
  

Комментарии:

1. спасибо, добавлено содержимое node.conf, да, они одинаковые

2. @AlessandroBaffa Я добавил Dockerfile для узлов, я использую простой corda/corda-zulu-java1.8-4.4 образ

3. спасибо, на самом деле это то, что я использовал во время работы, поэтому я не вижу ничего плохого.

Ответ №1:

надеюсь, это будет полезно для кого-то еще. Проблема на самом деле заключалась в поведении стека docker в том, что он по умолчанию не публикует внешние порты, они доступны только внутри swarm, поэтому, если вы хотите сделать их доступными за пределами swarm, вам нужно дополнительно запустить

 docker service update stack_users --publish-add 2222:2222
  

Комментарии:

1. Вы читаете мои мысли. Я собирался сказать, что вам просто нужно убедиться, что правильная переадресация портов на оболочку corda на узле. рад, что вы поняли это!