인프런 커뮤니티 질문&답변

종운님의 프로필 이미지
종운

작성한 질문수

초보를 위한 도커 안내서

도커 기본 명령어 (run)

안녕하세요 -d 옵션과 --rm 옵션에 대해서 질문을 하고자 합니다!

작성

·

195

0

docker로 mysql을 설치하는 과정에서 강의에 있는 명령어와 좀 다르게 mysql을 생성해봤습니다. 대체적으로 mysql은 백그라운드에서 돌아가는 환경이 더 많겠지? 라는 근거하에 다음과 같은 명령어를 사용하였는데요.

docker run --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name=docker_mysql8 -d mysql/mysql-server:8.0

docker exec -it docker_mysql8 mysql -uroot -p

mysql> exit
bye

문제는 이 이후였습니다. 명령어에 --rm이 있어서 해당 프로세스가 종료되면서 백그라운드로 돌아가고 있는 프로세스 또한 종료 될 것이라고 예상했으나 동일한 이름으로 다시 생성을 했을 때 다음과 같은 에러를 만날 수 있었습니다.

docker: Error response from daemon: Conflict. The container name "/docker_mysql8" is already in use by container
"39c64bd70886d1b35f2a94058c77e3e98a9c4b3c7411c66ceaee484f094c3908". 
You have to remove (or rename) that container to be able to reuse that name.

docker_mysql8 이 제거되지 않은 상태로 돌아가고 있는 부분이였는데요.

이러한 부분을 docker rm -f 명령어를 사용하여 수동적으로 제거해서 해당 문제는 해결 할 수 있었으나, 근본적으로 --rm이 왜 동작하지 않은 건지 찾아봐도 나오지 않아 질문드립니다!

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. docker에서 -d 옵션은 컨테이너를 백그라운드(background)에서 실행하도록 지정하는 옵션이고, –rm 옵션은 컨테이너가 종료되면 해당 컨테이너를 자동으로 삭제하는 옵션입니다.

하지만, –rm 옵션은 컨테이너가 종료될 때, 해당 컨테이너와 관련된 데이터(볼륨, 네트워크)를 자동으로 삭제하지는 않습니다. 즉, 컨테이너 이름이 동일한 경우, –rm 옵션을 사용하여 컨테이너를 다시 생성하려고 할 때 충돌이 발생할 수 있습니다.

충돌을 해결하기 위해선, 이미 동일한 이름으로 생성되어 있는 컨테이너를 제거해야 합니다. docker rm -f 명령어를 사용하여 수동적으로 제거하는 방법은 옳은 방법입니다.

–rm 옵션이 정상적으로 수행되지 않았던 이유는 정확한 원인을 파악하기 위해서는 docker의 상태나 다른 설정에 의해 영향을 받을 수 있으므로, 해당 상황을 정확히 파악하려면 docker의 로그나 상태 정보를 확인해야 합니다.

더 자세한 사항은 docker 공식 문서나 커뮤니티에서 자세히 알아보시기를 권장드립니다. 이를 위해 아래 링크에서 docker 관련 정보를 확인하실 수 있습니다.
- docker 공식 문서: https://docs.docker.com/
- docker 커뮤니티: https://forums.docker.com/

더 궁금한 사항이 있으시다면 추가로 질문해주세요! 좋은 하루 되세요.

종운님의 프로필 이미지
종운

작성한 질문수

질문하기