Я тестирую приложение Bitcoinj в docker compose, с двумя кошельками.Один запускается правильно, второй выбрасывает Caused by: java.io.IOException: org.bitcoinj.store.BlockStoreException: java.nio.channels.OverlappingFileLockException
.
Файлы кошелька и SPV монтируются в каждый док-контейнер и располагаются в корневом каталоге рабочей области ./docker-volumes/wallet-app/...
и ./docker-volumes/wallet-test/...
.
* 1007.* Насколько я понимаю,
OverlappingFileLockException
должно быть выдано, когда одна и та же JVM пытается заблокировать один и тот же файл несколько раз.В моем случае он выбрасывается, когда 2 контейнера, по-видимому, блокируют 2 разных файла в разных каталогах, поэтому это похоже на проблему с компоновкой докера, а не на Bitcoinj или другой код.
Мои тома монтируются как - ./docker-volumes/wallet-app:/wallet-app
и - ./docker-volumes/wallet-test:/wallet-test
в docker-compose.yml
Либо один из кошельков запускается самостоятельно самостоятельно.
После перезапуска сбойного контейнера с помощью docker-compose restart wallet-...
пару раз - он запускается нормально, и я могу запустить тесты.
Я подозреваю, что это связано с монтированием томов (хотя мои контейнеры все еще должны работать в 2-х отдельных JVM, как я себе представляю), но не смог найти ничего особенно полезного в докерской документации.Любые советы будут оценены.Спасибо.
РЕДАКТИРОВАТЬ: соответствующие службы docker-compose.yml
version: '3'
services:
listener:
image: listener:0.1
environment:
- NOTIFIER_URL=http://notifications:9000
- COIN_NET=test
- WALLET_PATH=/wallet
- MONGO_HOST=mongo
- MONGO_PORT=27017
- MONGO_DB=test_db
- RMQ_HOST=rabbit
- RMQ_PORT=5672
- RMQ_USERNAME=user
- RMQ_PASSWORD=password
- RMQ_ROUTING=event_producer
- RMQ_EXCHANGE=amq.direct
volumes:
- ./docker-volumes/wallet-app:/wallet
depends_on:
- mongo
- notifications
- rabbit
listener-test:
image: test:0.1
volumes:
- ./docker-volumes/wallet-test:/wallet-test