동시성 문제 해결을 위해 강의를 들으며 docker 를 실행하기전 docker version 을 터미널에 입력하였는데
"Cannot connect to the Docker daemon at unix:///Users/kyungmin/.docker/run/docker.sock. Is the docker daemon running?"
이라는 메시지가 나왔다.
kyungmin@kyungmin-MacBookPro ~ % docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=**** --name mysql mysql
docker: Error response from daemon: Conflict. The container name "/mysql" is already in use by container "id". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'
이미 /mysql 이라는 이름이 사용중이라는 메시지가 나타났다. 언제 사용중이었는지는 모르겠지만
docker ps- a
를 통해 기존의 모든 컨테이너를 확인한 후
docker rm id
기존에 있던 컨테이너를 삭제해주었다.
그럼 이제 해결이 되겠지? 하고 다시 run 명령어를 입력하였다.
하지만!
kyungmin@kyungmin-MacBookPro ~ % docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=**** --name mysql mysql
id
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: address already in use.
이와 같이 이미 3306 포트가 사용중이라는 메시지가 나왔다. 3306 포트를 사용중인지 확인을 해보자.
lsof -i :3306
이 명령어를 통해 3306 포트를 사용 중인 프로세스를 확인한다. 하지만 난 3306 포트를 사용중인 프로세스가 존재하지 않았다.. 그럼 왜일까
docker restart
찾아보니 docker 를 재시작해보라는 블로그 글이 있었다. restart 명령어를 통해 docker 를 재시작시켜 보았다.
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=**** --name mysql mysql
id
kyungmin@kyungmin-MacBookPro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
id mysql "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp mysql
docker 를 재시작하고 다시 같은 방법으로 해보니 정상적으로 실행이 되었다. 이유는 '네트워크 포트 충돌' 이나 '도커 데몬의 상태' 등이 있다고 한다.
사진과 같이 desktop 에서도 정상적으로 실행이 된것을 확인할 수 있었다.
별거 아닌 문제였지만 적어두고 기억하자