我已经被这个问题困扰很长一段时间了,任何帮助将不胜感激。
所以我有一个包含 Elastic Stack 服务的 docker compose,以及一个 Cassandra 数据库。
我正在尝试使用 CassandraJDBC42.jar 驱动程序通过 Logstash 将数据从 Cassandra 数据库索引到 ElasticSearch,我通过 docker 卷安装该驱动程序。
每当我运行服务时
docker compose up
(版本 2 Docker Compose),除了 Logstash 服务之外,一切都运行顺利,它不会启动 - 这是日志中的错误。
Using bundled JDK: /usr/share/logstash/jdk
Error: Could not find or load main class org.logstash.launchers.JvmOptionsParser
Caused by: java.lang.ClassNotFoundException: org.logstash.launchers.JvmOptionsParser
这就是 Docker Compose Logstash 服务。
logstash:
image: logstash:7.17.18
container_name: logstash
# restart: always
volumes:
- logstash_data:/usr/share/logstash/data
- ./cassandra-driver/:/usr/share/logstash/logstash-core/lib/jars # MOUNTING OF THE DRIVER
- ./logstash/logstash.conf:/logstash_dir/logstash.conf
command: logstash -f /logstash_dir/logstash.conf
depends_on:
- elasticsearch
ports:
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elastic
如果我卸下驱动器的安装,一切都会顺利进行。
尝试了不同版本的图片,问题依然存在。
尝试了不同的驱动程序,还是一样。
尝试在没有驱动的情况下运行容器,进入内部,安装openjdk-11,再次挂载驱动,还是一样。
已修复,问题是卷的映射,它需要主机和容器上包含的确切路径和文件。
#OLD ./cassandra-driver/:/usr/share/logstash/logstash-core/lib/jars
#FIX ./cassandra-driver/CassandraJDBC42.jar:/usr/share/logstash/logstash-core/lib/jars/CassandraJDBC42.jar
logstash.conf 文件也是如此。