ElasticSearch Docker容器始终处于Exited(1)状态无法启动求助
问题描述
- 环境:Docker + ElasticSearch 7.17.6
- 执行
docker-compose up -d操作无异常,但手动执行sudo docker container start <container-ID>启动ElasticSearch容器时,容器始终处于Exited(1)状态,无法正常运行
错误日志
容器启动日志
执行sudo docker logs <Container-ID>得到以下异常:
Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218) at java.base/java.nio.file.Files.newByteChannel(Files.java:380) at java.base/java.nio.file.Files.newByteChannel(Files.java:432) at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:422) at java.base/java.nio.file.Files.newInputStream(Files.java:160) at org.elasticsearch.tools.launchers.JvmOptionsParser.readJvmOptionsFiles(JvmOptionsParser.java:168) at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:124) at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:86)
系统日志(/var/log/messages)
msg="error detaching from network es_elastic: could not find network attachment for container <Container-ID> to network es_elastic" Nov 1 13:11:07 ES11 dockerd: time="2022-11-01T13:11:07.567246932-04:00" level=info msg="initialized VXLAN UDP port to 4789 " Nov 1 13:11:07 ES11 kernel: br0: port 2(<Device_name2>) entered disabled state Nov 1 13:11:07 ES11 kernel: br0: port 1(<Device_name1>) entered disabled state Nov 1 13:11:07 ES11 kernel: ov-1-f: renamed from br0 Nov 1 13:11:07 ES11 kernel: device <Device_name2> left promiscuous mode Nov 1 13:11:07 ES11 kernel: ov-1-f: port 2(<Device_name2>) entered disabled state Nov 1 13:11:07 ES11 kernel: device <Device_name1> left promiscuous mode Nov 1 13:11:07 ES11 kernel: ov-1-f: port 1(<Device_name1>) entered disabled state Nov 1 13:11:07 ES11 kernel: vx-1-f: renamed from <Device_name1> Nov 1 13:11:07 ES11 kernel: : renamed from <Device_name2> Nov 1 13:11:07 ES11 avahi-daemon[891]: Withdrawing workstation service for vx-1-f. Nov 1 13:11:07 ES11 NetworkManager[999]: <info> [ID.7289] manager: (): new Veth device (/org/freedesktop/NetworkManager/Devices/144) Nov 1 13:11:07 ES11 kernel: : renamed from eth0 Nov 1 13:11:07 ES11 NetworkManager[999]: <info> [ID.7693] manager: (): new Veth device (/org/freedesktop/NetworkManager/Devices/145) Nov 1 13:11:07 ES11 dockerd: time="2022-11-01T13:11:07.ID-04:00" level=warning msg="Error (Unable to complete atomic operation, key modified) deleting object
解决方案
1. 修复jvm.options文件缺失问题
容器启动失败的核心原因是找不到/usr/share/elasticsearch/config/jvm.options,通常是本地挂载的配置目录异常导致:
- 检查
docker-compose.yml中ElasticSearch的配置挂载项,确认本地目录(如./config)是否存在,且包含完整的ES配置文件 - 如果本地配置目录为空,先从官方镜像拷贝默认配置:
# 启动临时容器拷贝配置 docker run --rm -d --name temp-es elasticsearch:7.17.6 # 拷贝配置到本地es-config目录 docker cp temp-es:/usr/share/elasticsearch/config ./es-config # 停止临时容器 docker stop temp-es - 修改
docker-compose.yml中的挂载路径,指向拷贝的配置目录:services: elasticsearch: image: elasticsearch:7.17.6 volumes: - ./es-config:/usr/share/elasticsearch/config # 其他挂载项(如数据目录)保持不变 - 修复本地配置目录权限(ES容器默认使用UID/GID 1000运行):
chown -R 1000:1000 ./es-config
2. 修复网络关联异常问题
系统日志显示容器与es_elastic网络关联异常,可通过以下方式修复:
- 检查网络是否存在:
docker network ls - 如果网络不存在,手动创建:
docker network create es_elastic - 将容器连接到该网络:
docker network connect es_elastic <container-ID> - 更稳妥的方式是通过docker-compose重新部署,它会自动管理网络和容器关联:
docker-compose down docker-compose up -d
内容的提问来源于stack exchange,提问作者Boodle
相关产品推荐
相关产品推荐

