처음에 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
명령어를 실행한 후, 제대로 실행되고 있는지 확인해보았는데 ...
으응 ..?
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가 동작되는지 확인하고
기본 기능을 테스트 해보는 것이 우선이라 오류가 난 부분을 제외하고 진행하고자 한다.
문제가 발생한 SSL 부분의 코드를 수정하자.
xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false
위에서 true로 주었던 값들을 다 false로 변경하였다.
그 후 실행을 하니
더 이상 종료되는 일 없이 잘 실행되고 있다.
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"