프로젝트 설정/Docker

[Docker] 사용되고 있는 port 주인(container) 확인하기 (feat. PID, -net host)

24시간초보 2021. 12. 30. 12:39
반응형

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

 

반응형