생성하지 않은 도커 볼륨이 생기는 이유

위처럼 docker-compose.yml 파일에서 정의하지 않은 도커 볼륨이 생긴다.
- 심지어 아래 항목을 로컬에서 먼저 만들어줘도 그렇다!
hadoop-master-data:
hadoop-slave1-data:
hadoop-slave2-data:
파일 수정 이후, 볼륨을 초기화하며 최초 상황에서부터 시작하기를 기대했는데, 아니나 다를까 네임노드가 초기화되지 않았다.
- 의도대로라면 볼륨을 삭제하고 다시 연결하면 네임노드가 포맷되어야 한다!

위의 문제와 연관지어 생각해보니, 현재 컨테이너에 연결되어 있는 볼륨이 hadoop-master-date가 아닌,
spark-analysis_hadoop-master-data 임을 깨달았다.

claude는 이렇게 말한다
즉, 현재 docker-compose.yml 파일이 있는 디렉토리명(spark-analysis)가 볼륨앞에 붙어 새로 생성되는 것이다. 심지어 로컬에서 미리 만들었던 hadoop-master-date 는 도커 컴포즈의 기본 동작방식을 따르지 않으니 컨테이너에 연결되지 못하고, spark-analysis_hadoop-master-data 라는 볼륨이 새로 만들어지는 것이다.
즉, 다음의 간단한 스크립트도 변경해야한다.
## 기존
#!/usr/bin/env bash
docker volume rm hadoop-master-data hadoop-slave1-data hadoop-slave2-data
docker volume create hadoop-master-data
docker volume create hadoop-slave1-data
docker volume create hadoop-slave2-data
## 수정이후
#!/usr/bin/env bash
pwd=$PWD
docker volume rm "$(basename $pwd)_hadoop-master-data" \\
"$(basename $pwd)_hadoop-slave1-data" \\
"$(basename $pwd)_hadoop-slave2-data"
docker volume create "$(basename $pwd)_hadoop-master-data"
docker volume create "$(basename $pwd)_hadoop-slave1-data"
docker volume create "$(basename $pwd)_hadoop-slave2-data"
+그리고 이렇게 연결이 될 경우, 도커 컴포즈를 실행하면 다음과 같은 warning이 뜬다.

컴포즈 파일에 다음과 같이 **exteranl: true**로 설정하고, 이름도 바꿔주자.
version: "3.8"
services:
hadoop-master:
image: jnamu/spark-analysis-node:latest
container_name: hadoop-master
hostname: hadoop-master
ports:
- "8888:8888" # Jupyter Notebook
- "8080:8080" # Spark Master UI
- "4040:4040" # Spark Job UI
- "7077:7077"
- "7777:7777"
- "9870:9870" # HDFS NameNode Web UI
- "8020:8020" # HDFS NameNode HDFS API
- "8088:8088" # YARN ResourceManager Web
- "9000:9000" # fs.DefaultFS
volumes:
- spark-analysis_hadoop-master-data:/opt/hadoop/data
hadoop-worker-1:
image: jnamu/spark-analysis-node:latest
container_name: hadoop-worker-1
hostname: hadoop-worker-1
depends_on:
- hadoop-master
ports:
- "8081:8081" # Spark Worker UI
- "9864:9864" # HDFS DataNode Web UI
- "8042:8042" # YARN NodeManager Web UI
volumes:
- spark-analysis_hadoop-slave1-data:/opt/hadoop/data
hadoop-worker-2:
image: jnamu/spark-analysis-node:latest
container_name: hadoop-worker-2
hostname: hadoop-worker-2
depends_on:
- hadoop-master
ports:
- "8082:8081" # Spark Worker UI
- "9865:9864" # HDFS DataNode Web UI
- "8043:8042" # YARN NodeManager Web UI
volumes:
- spark-analysis_hadoop-slave2-data:/opt/hadoop/data
volumes:
spark-analysis_hadoop-master-data:
external: true
spark-analysis_hadoop-slave1-data:
external: true
spark-analysis_hadoop-slave2-data:
external: true
댓글