服务器配置:
操作系统:Ubuntu 24.04.1 LTS
内存:64G
硬盘:2T
CPU:Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz
docker版本(docker --version):Docker version 26.1.3, build 26.1.3-0ubuntu1~24.04.1
docker-compose版本(docker-compose -v):docker-compose version 1.29.2, build unknown
问题是之前已经创建了Elasticsearch 和 kibana容器并且已经提供服务了,里面产生了大量的数据,目的是保证数据不被删除的情况下,将数据迁移出来,挂载的宿主机的目录下。旧的docker启动的docker-compose.yml配置如下(这个配置文件中宿主目录与容器中的目录映射关系搞反了 ,例如:- es_data:/opt/elasticsearch/data,/opt/elasticsearch/data其实是宿主机的目录,容器中的目录是:/usr/share/elasticsearch/data):
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
environment:
discovery.type=single-node
ES_JAVA_OPTS=-Xms4g -Xmx8g
xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- es_data:/opt/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
volumes:
es_data:
操作步骤如下(操作完成后,旧的容器还在没有被删除,新的elasticsearch和kibana容器ID已经变了):
1、查看容器服务 :docker ps,可以看到elasticsearch容器的ID是25d39efe5c18 ,kibana容器的ID是:01ceb52cc425
(base) root@root:~# docker ps
01ceb52cc425 docker.elastic.co/kibana/kibana:8.12.0 "/bin/tini -- /usr/l..." 8 months ago Up 46 hours 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp es_kibana_1
25d39efe5c18 docker.elastic.co/elasticsearch/elasticsearch:8.12.0 "/bin/tini -- /usr/l..." 8 months ago Up 46 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp 25d39efe5c18_es_elasticsearch_1
2、将数据从elasticsearch容器中复制出来,放到/opt/elasticsearch/目录下,执行完一下命令后,可以看到/opt/elasticsearch/目录下多了一个data目录,这个就是从容器中复制出来的数据。
从容器中复制数据到宿主机:
(base) root@root:~# docker cp 25d39efe5c18:/usr/share/elasticsearch/data /opt/elasticsearch/
3、停止elasticsearch和kibana的容器服务(这里要两个一起停止,后边需要两个一起重建)
停止kibana服务:
(base) root@root:~# docker stop 01ceb52cc425
停止elasticsearch服务:
(base) root@root:~# docker stop 25d39efe5c18
4、将docker-compose.yml配置文件修改为如下(注意红色的容器名称一定不要和之前的一样):
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: es01
特权模式:允许内存锁定
privileged: true
重启策略:故障自动重启
restart: always
environment:
discovery.type=single-node
ES_JAVA_OPTS=-Xms31g -Xmx31g
xpack.security.enabled=false
bootstrap.memory_lock=true # 锁定内存,禁用SWAP
ports:
- "9200:9200"
volumes:
- /opt/elasticsearch/data:/usr/share/elasticsearch/data
kibana01:
image: docker.elastic.co/kibana/kibana:8.12.0
container_name: kibana01
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200
depends_on:
- es01
5、创建elasticsearch和kibana容器并后台启动
(base) root@root:~# docker-compose up -d es01
(base) root@root:~# docker-compose up -d kibana01
6、访问elasticsearch和kibana即可看到对应的界面(kibana启动需要几分钟,耐心等一会):
elasticsearch访问地址:http://192.168.1.100:9200/
{ "name" : "5c61ec77ca3b", "cluster_name" : "docker-cluster", "cluster_uuid" : "CXebZmVlTIBeBCoQgNUYcA", "version" : { "number" : "8.12.0", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "1665f707fd9354402c02142c1e6b5c0fbcedfcp9", "build_date" : "2024-01-11T10:05:27.953830042Z", "build_snapshot" : false, "lucene_version" : "9.9.1", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }
kibana访问地址:http://192.168.1.100:5601/app/management/data/index_management/indices
