#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 на узле. рад, что вы поняли это!