[TIL] Docker ElasticSearch 실행 오류 해결하기

su·2024년 8월 23일
0

TIL

목록 보기
90/93
post-thumbnail

ElasticSearch를 Docker에 올려보자

처음에 Docker 컨테이너에 사용할 ElasticSearch 이미지를 다운로드 완료해두어서
docker-compose.yml 파일을 생성하여
ElasticSearch에 대한 설정을 하고자 했다.

내가 처음에 작성한 docker-compose.yml 파일이다

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.4
    container_name: {컨테이너 이름}
    environment:
      discovery.type: single-node
      xpack.security.enabled: true
      xpack.security.transport.ssl.enabled: true
      ELASTIC_USERNAME: {사용자 이름}
      ELASTIC_PASSWORD: {비밀번호}
      ES_JAVA_OPTS: "-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
      - "9300:9300"

이미지는 내가 도커에 다운로드 받아둔 ElasticSearch로 적어주고,
사용할 컨테이너명, 사용자명, 비밀번호를 각각 채워준다

그리고 security와 ssl을 전부 true로 설정해주었다

터미널에서

docker-compose up -d

명령어를 실행한 후, 제대로 실행되고 있는지 확인해보았는데 ...

ElasticSearch 비정상 종료

으응 ..?

docker ps

위 명령어를 통해 컨테이너가 잘 동작하고 있는지 확인해보았는데,
새롭게 만든 ElasticSearch 정보가 나오지 않았다.

Docker를 열어보니, 중지가 되어있었다.

다시 시작을 눌러놓고 상황을 확인해보니,

ERROR: Elasticsearch did not exit normally
- check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

아래와 같은 내용을 뱉고 중지가 되었다 ... 하하
실행한지 몇 초 지나지 않아 elasticsearch가 꺼지는 귀한 경험..

오류 내용에서는 정상적으로 ElasticSearch가 종료된 것이 아니니,
log 파일을 확인해보라고 친절하게 방법을 알려주었다.

앗 !
로그 파일을 읽어볼 수 있는 좋은 기회잖아 ?
완전 럭키비키잖아🍀 ... (눈물)

다시 ElasticSearch를 구동하고,
꺼지기 전에 아래 명령어를 입력해 로그 파일을 확인하고자 했는데,

cat /usr/share/elasticsearch/logs/docker-cluster.log

엥 ? 로그 파일이 없다고 한다 .. 왜지 ..
이대로 놔두지 않고, Docker의 Log를 읽어보기 위해 명령어를 다시 입력했다.

docker logs '컨테이너ID'

내용이 ... 너무 많이 나와서 3초간 정지했다가
미간을 찌푸리면서 확인해보니 ERROR 라고 적힌 부분을 찾아내었다.

{"@timestamp":"2024-08-23T03:25:09.909Z", "log.level":"ERROR",
"message":"fatal exception while booting Elasticsearch", "ecs.version":
"1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server",
"process.thread.name":"main",
"log.logger":"org.elasticsearch.bootstrap.Elasticsearch",
"elasticsearch.node.name":"2b34917ff955",
"elasticsearch.cluster.name":"docker-cluster",
"error.type":"org.elasticsearch.ElasticsearchSecurityException",
"error.message":"invalid SSL configuration for xpack.security.transport.ssl 
- server ssl configuration requires a key and certificate, 
but these have not been configured;
you must set either [xpack.security.transport.ssl.keystore.path],
or both [xpack.security.transport.ssl.key] and
[xpack.security.transport.ssl.certificate]",
"error.stack_trace":"org.elasticsearch.ElasticsearchSecurityException:
invalid SSL configuration for xpack.security.transport.ssl 
- server ssl configuration requires a key and certificate, 
but these have not been configured; you must set either 

(중략..)

ERROR: Elasticsearch did not exit normally
- check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

ERROR: Elasticsearch exited unexpectedly, with exit code 1

내용이 매우 길지만 error.message 부분을 잘 살펴보면
SSL과 관련된 오류가 났다는 것을 알 수 있다.

위의 yml 파일에, xpack.security.transport.ssl.enable 설정을 true로 주었는데
정작 SSL 통신을 위해 필요한 키와 인증서를 설정하지 않았다.

물론 SSL 설정을 해둔 채로 진행하면 좋지만,
지금은 우선 Docker에 올려둔 ElasticSearch가 동작되는지 확인하고
기본 기능을 테스트 해보는 것이 우선이라 오류가 난 부분을 제외하고 진행하고자 한다.

yml 코드 수정

문제가 발생한 SSL 부분의 코드를 수정하자.

xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false

위에서 true로 주었던 값들을 다 false로 변경하였다.

그 후 실행을 하니
더 이상 종료되는 일 없이 잘 실행되고 있다.

수정된 yml 파일 전체 내용

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.10.4
    container_name: {컨테이너 이름}
    environment:
      discovery.type: single-node
      xpack.security.enabled: true
      xpack.security.transport.ssl.enabled: false
      xpack.security.http.ssl.enabled: false
      ELASTIC_USERNAME: {사용자 이름}
      ELASTIC_PASSWORD: {비밀번호}
      ES_JAVA_OPTS: "-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
      - "9300:9300"
profile
(❁´◡`❁)

0개의 댓글