[Docker] 사용되고 있는 port 주인(container) 확인하기 (feat. PID, -net host)
docker run할때 -p 옵션을 주어 port를 연결하는 방법도 있지만
보통 -net host 등을 이용하여 설정을 안하는 경우가 많다..(우리 회사만 그런가..?)
그래서 나중에 port를 누가 사용하고 있는지 확인하기가 어려웠다.
(찾기 쉬운 방법 알려주실 분 ㅠㅠ)
그래서 그걸 찾으면서 알아본 내용들을 정리해본다.
방법을 알고싶다면 바로 "방법"으로
다른 지식도 알고 싶다면 정독!
host post와 container의 내부 port의 연결 상태를 확인 할 수 있는 docker port
Docker port
docker port
docker port: List port mappings or a specific mapping for the container
docs.docker.com
List port mappings or a specific mapping for the container
컨테이너에 대한 포트 매핑 또는 특정 매핑 나열
host post와 container의 내부 port의 연결 상태를 확인
즉, docker run할때 -p 옵션을 주어 port를 연결한 경우 등
docker port [container id|container name]
docker inspect (-net host 옵션 줬을때)
docker inspect
docker inspect: Docker inspect provides detailed information on constructs controlled by Docker. By default, `docker inspect` will render results in a JSON array.
docs.docker.com
Return low-level information on Docker objects
정의 : Docker 개체에 대한 하위 수준 정보 반환
즉 세부정보를 볼 수 있는 명령어
docker inspect -f '{{.State.Pid}}' {container_id or name}
docker inspect를 통하여 pid를 확인할 수 있다고 하나
그 pid는 docker 자체의 pid인듯 하여 (?) 여튼 내가 원하는 기능은 하지 않았다.
나중에 한번 더 알아봐야할것 같다!
전체 컨테이너 PID 확인하기
sudo docker ps -q | xargs sudo docker inspect --format '{{.State.Pid}}: {{.Name}}'
내가 찾은 방법
1. PID 확인
netstat -lntp 또는 ss -lntp 등으로 내가 알고 찾고 싶은 port를 사용하고 있는 PID를 확인한다.
아래를 예로 들면 port 8740을 사용하고 있는 프로세스의 PID는 17883이다.
2. docker top 으로 PID 확인하기
1) docker ps 로 container id 또는 names 확인
2) docker top [container id or container name] 노가다 시작
docker 중 왠지 사용하고 있을 것 같은 후보군을 시작으로 docker top containerid으로 조회를 해줍니다.
그 중 내가 원하는 PID가 나왔다 하면 그 container에서 그 port를 사용하고 있는것입니다.
범인은 바로 너!
나중에 해보기
for container in $(sudo docker ps --format '{{.Names}}'); do
echo "Checking in $container..."
sudo docker exec $container bash -c 'netstat -tuln | grep :46540' 2>/dev/null
done
다음에 공부할 것
https://aidanbae.github.io/code/docker/docker-netstat/
Docker Container 내부 소켓 상태 확인 - nsenter와 netstat
Docker Container 내부 소켓 상태 확인 - nsenter와 netstat - 아이단의 블로그
aidanbae.github.io
https://docs.docker.com/engine/reference/commandline/network/
docker network
docker network: Manage networks. You can use subcommands to create, inspect, list, remove, prune, connect, and disconnect networks.
docs.docker.com