컨테이너 생성 과정에서의 문제 해결
컨테이너 생성 과정에서 마주친 문제와 그 해결 과정을 정리했다.
프로그래머스 데브코스 과정에서 Docker 컨테이너를 생성하는 방법을 배웠다. 강의에서 알려준 명령을 그대로 사용하는 대신, 공식 문서를 찾아보고 문서에서 알려주는 명령을 사용했다. 하지만 공식 문서대로 만든 컨테이너에 앱을 통해 접속하면 문제가 발생하였다.
공식 문서의 명령 사용하기
다음은 데브코스에서 다른 학생분이 공유해 주신 문제 해결이다.
이처럼 강의나 블로그에 나오는 구체적인 명령이나 내용은 최신이 아니거나 잘못된 정보일 수 있다. 따라서 가장 최신이고 공신력 있는 공식 문서를 확인하는 것이 좋다.
MariaDB 공식 문서에서는 다음 명령을 사용한다.
또는 다음 명령도 있다.
오류 발생
강의에서 알려준 컨테이너 생성 명령은 다음과 같다.
Docker Hub의 MariaDB 공식 이미지 문서에서는 다음 명령을 사용한다.
위 명령으로 컨테이너를 생성한 다음, 앱을 실행하여 MariaDB에 접속하면 다음과 같은 오류가 뜨며 종료되어 버린다.
문제 해결
사실 강의에서 알려준 명령을 사용하면 오류가 생기지 않는다. 하지만 어떤 이유로 오류가 발생하는지 궁금했다.
결론부터 말하자면, -p
옵션을 사용하지 않아 앱에서 접속할 수 없었던 것이다.
문제의 원인을 파악하기 위해서는, 명령의 각 옵션이 어떤 역할을 하는지 알 필요가 있다.
-
--name
: 컨테이너 이름
-
--detach
, -d
: 컨테이너를 백그라운드에서 실행. 이 옵션을 넣지 않으면 터미널을 종료할 때 컨테이너도 같이 종료됨.
-
--env
, -e
: 컨테이너의 환경 변수
-
--restart
: Docker가 재시작될 때 컨테이너도 자동으로 재시작됨. Docker가 사고로 종료되었을 때를 위한 옵션 같다.
-
--publish
, -p
: 원인은 이 옵션 때문이다!
-p
뒤에 오는 값은 포트 번호를 의미한다.
예를 들어 -p 80:3306
은 다음을 의미한다.
이 멋진 그림의 출처는 이곳이다. Docker의 포트 개념에 대한 설명이 잘 되어있으므로 참고 바란다.
강의에서는 편의상 -p 3306:3306
를 사용했지만 앞의 번호는 다른 번호를 사용해도 된다. 다만 앱의 포트 번호를 해당 번호로 변경해야 하는 것을 잊지 말아야 한다.
나중에 알았지만 Docker Desktop 프로그램에서 컨테이너 목록만 봐도, 문제의 원인을 짐작할 수 있다.