We have a use case to preload some data (e.g. creating some indexes ) into a running Elasticsearch container and once finished, docker commit
it to create a data-preloaded image that can be used later.
Everything works on docker.elastic.co/elasticsearch/elasticsearch:7.17.16
but things are not working on the latest image 7.17.27
.
After some debugging and narrowing down, not work even without data loading (below codes).
# Script to create a image from `docker commit`
#!/usr/bin/env bash
BUILD_NUMBER="1"
REPOSITORY_NAME="nerd-repo"
REGISTRY="102642240800.dkr.ecr.ap-southeast-2.amazonaws.com"
echo "Starting docker compose..."
docker compose up -d
echo "waiting Elasticsearch cluster to settledown..."
sleep 10
echo "Stop the container before committing..."
docker stop elastic_nerapi
echo "Commit docker container..."
docker commit elastic_nerapi $REGISTRY/$REPOSITORY_NAME:$BUILD_NUMBER
docker tag $REGISTRY/$REPOSITORY_NAME:$BUILD_NUMBER $REGISTRY/$REPOSITORY_NAME:latest
docker compose down
docker run \
--name nerd_sidecar \
-p 9200:9200 \
-p 9300:9300 \
-e cluster.name=nerd-cluster \
-e discovery.type=single-node \
-e ES_JAVA_OPTS='-Xms3g -Xmx3g' \
102642240800.dkr.ecr.ap-southeast-2.amazonaws.com/nerd-repo:$BUILD_NUMBER
trap : 0
// docker-compose.yml
version: "2.2"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.27
container_name: elastic_nerapi
environment:
- cluster.name=nerd-cluster
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms3g -Xmx3g"
ports:
- 9200:9200
networks:
- esnet
networks:
esnet:
// Error message
{"type": "server", "timestamp": "2025-02-17T21:44:43,657Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "nerd-cluster", "node.name": "f5b2da2ba459", "message": "heap size [3gb], compressed ordinary object pointers [true]" }
{"type": "server", "timestamp": "2025-02-17T21:44:43,658Z", "level": "ERROR", "component": "o.e.b.ElasticsearchUncaughtExceptionHandler", "cluster.name": "nerd-cluster", "node.name": "f5b2da2ba459", "message": "uncaught exception in thread [main]",
"stacktrace": ["org.elasticsearch.bootstrap.StartupException: org.apache.lucene.store.AlreadyClosedException: Underlying file changed by an external force at 2025-02-17T21:44:43.653676Z, (lock=NativeFSLock(path=/usr/share/elasticsearch/data/nodes/0/node.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid],creationTime=2025-02-17T21:44:39.694362012Z))",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:173) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) ~[elasticsearch-cli-7.17.27.jar:7.17.27]",
"at org.elasticsearch.cli.Command.main(Command.java:77) ~[elasticsearch-cli-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) ~[elasticsearch-7.17.27.jar:7.17.27]",
"Caused by: org.apache.lucene.store.AlreadyClosedException: Underlying file changed by an external force at 2025-02-17T21:44:43.653676Z, (lock=NativeFSLock(path=/usr/share/elasticsearch/data/nodes/0/node.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid],creationTime=2025-02-17T21:44:39.694362012Z))",
"at org.apache.lucene.store.NativeFSLockFactory$NativeFSLock.ensureValid(NativeFSLockFactory.java:191) ~[lucene-core-8.11.3.jar:8.11.3 baa7c80af4278cc8951a344d8e9320386588d12d - houstonputman - 2024-02-05 15:02:58]",
"at org.elasticsearch.env.NodeEnvironment.assertEnvIsLocked(NodeEnvironment.java:1105) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.env.NodeEnvironment.nodeDataPaths(NodeEnvironment.java:867) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.env.NodeEnvironment.assertCanWrite(NodeEnvironment.java:1280) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:342) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.node.Node.<init>(Node.java:429) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.node.Node.<init>(Node.java:309) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:234) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434) ~[elasticsearch-7.17.27.jar:7.17.27]",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169) ~[elasticsearch-7.17.27.jar:7.17.27]",
"... 6 more"] }
uncaught exception in thread [main]
org.apache.lucene.store.AlreadyClosedException: Underlying file changed by an external force at 2025-02-17T21:44:43.653676Z, (lock=NativeFSLock(path=/usr/share/elasticsearch/data/nodes/0/node.lock,impl=sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid],creationTime=2025-02-17T21:44:39.694362012Z))
at org.apache.lucene.store.NativeFSLockFactory$NativeFSLock.ensureValid(NativeFSLockFactory.java:191)
at org.elasticsearch.env.NodeEnvironment.assertEnvIsLocked(NodeEnvironment.java:1105)
at org.elasticsearch.env.NodeEnvironment.nodeDataPaths(NodeEnvironment.java:867)
at org.elasticsearch.env.NodeEnvironment.assertCanWrite(NodeEnvironment.java:1280)
at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:342)
at org.elasticsearch.node.Node.<init>(Node.java:429)
at org.elasticsearch.node.Node.<init>(Node.java:309)
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:234)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.Command.main(Command.java:77)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80)
For complete error details, refer to the log at /usr/share/elasticsearch/logs/nerd-cluster.log
any input is appreciated.