我正在docker compose中测试一个带有两个钱包的Bitcoinj应用程序。一个正确启动,第二个抛出Caused by: java.io.IOException: org.bitcoinj.store.BlockStoreException: java.nio.channels.OverlappingFileLockException
。
钱包和SPV文件安装在每个docker容器中,并且位于工作空间根目录./docker-volumes/wallet-app/...
和./docker-volumes/wallet-test/...
中。
据我了解,当同一JVM尝试多次锁定同一文件时,应该抛出OverlappingFileLockException
。在我的情况下,当2个容器看似将2个不同的文件锁定在不同目录中时,会抛出该异常,因此这似乎是docker compose问题,而不是Bitcoinj或其他代码。
我的卷在docker-compose.yml中分别安装为- ./docker-volumes/wallet-app:/wallet-app
和- ./docker-volumes/wallet-test:/wallet-test
其中一个钱包均可正确启动。
使用docker-compose restart wallet-...
重新启动崩溃的容器几次后-它开始正常,我可以运行测试。
我怀疑这与卷挂有关(尽管我的容器仍应该在2个单独的JVM中运行,我想像中),但是在Docker文档中找不到特别有用的东西。任何提示将不胜感激。谢谢。
编辑: 相关的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