
통과다른내 말은 이 명령을 발견했다는 것입니다. nsenter
그리고 네임스페이스를 사용하고 디버깅하는 데 적합한 다른 도구/명령이 있을 수 있다고 생각했습니다. 어디? 나는 그들이 어떻게 작동하는지 묻는 것이 아니라 docker/k8s 등을 사용하기 위한 더 광범위한 도구 세트를 얻는다는 것을 명심하십시오.
namespace
Linux에는 어떤 다른 명령이 있습니까?
답변1
[있습니다] 네임스페이스 작업 및 디버깅에 적합한 다른 도구/명령이 있습니까?
에른슬가장 중요한 것입니다. 몇 가지 더 있지만 많지는 않습니다. 나는 그것들을 모두 나열하려고 노력할 것이라고 생각했습니다.
/proc/[pid]/ns/*
- 본 적이 있기 때문에 이미 알고 있는 것입니다nsenter
. 자세한 내용이 있습니다네임스페이스(7):- 위 파일은 심볼릭 링크로 나타납니다.
readlink
/를 실행하면ls -l
네임스페이스 유형과 고유 식별자가 표시됩니다. - 위 파일을 바인드 마운트하여 네임스페이스에 대한 영구 참조를 유지할 수 있습니다. 이것이 조금 이상하게 들린다고 생각하신다면 동의합니다. 하지만 어떤 경우에는 유용할 수도 있습니다 :-).
- 위 파일은 심볼릭 링크로 나타납니다.
- LSNS-
/proc
웹을 크롤링하고 사용 중인 다양한 네임스페이스를 모두 나열합니다. /proc/[pid]/mountinfo
마운트 네임스페이스에 대해 설명합니다. 에 기록되어 있어요공정(5).칼럼이 많기 때문에 처음 보실 때 주의하세요. 예를 들어
rw
/ 값이 서로 다른 두 개의 서로 다른 옵션 열이 있을 수 있습니다ro
. 차이점은 동일한 파일 시스템의 바인드 마운트 간에 마운트 옵션 열이 다를 수 있다는 것입니다.findmnt
마운트된 파일 시스템을 나열하는 표준 명령입니다. 옵션이 있으므로 이를 사용하여 모든 프로세스에 대한 파일을--task TID
구문 분석할 수 있습니다 .mountinfo
(PID 값도 유효한 TID입니다.)/proc/[pid]/uid_map
그리고/proc/[pid]/gid_map
사용자 네임스페이스.ip
네트워크 인터페이스 제어 명령:- IP 네트워크특히 네트워크 네임스페이스에 대한 일부 명령을 제공합니다. 즉,
net
위에서 설명한 대로 파일을 사용합니다 ./proc/[pid]/ns/
ip link
veth
다음을 포함하여 피어에 대한 정보를 표시할 수 있습니다 .현지의피어가 상주하는 네트워크 네임스페이스의 식별자입니다.ip netns list-id
또는lsns -t net
이 로컬 식별자를 포함하는 네트워크 네임스페이스가 나열됩니다. 이러한 로컬 식별자를 어떻게 사용하는지 잘 모르겠습니다. 약간 모호한 것 같습니다. 하지만 이 QA에서는 당신이 할 수 있는 모든 것을 언급했다고 생각합니다.veth 피어 노드 ifindex의 네트워크 네임스페이스를 찾는 방법은 무엇입니까?ip
또한 인터페이스를 한 네트워크에서 다른 네트워크로 이동할 수 있습니다. 이것은 디버깅과 관련이 없지만.
- IP 네트워크특히 네트워크 네임스페이스에 대한 일부 명령을 제공합니다. 즉,
"나는 당신을보고있다, 단일 바이너리 go
컨테이너"
에서 적응별도의 컨테이너에서 실행 중인 Docker 컨테이너를 디버깅하는 방법:
사용상의 문제 nsenter
. 당신이 입력하면마운트 네임스페이스컨테이너의 명령은 컨테이너 내에 포함된 명령만 실행할 수 있습니다. 하지만 Docker 컨테이너의 핵심은 애플리케이션 자체만 포함하면 된다는 것입니다!
비결은 /proc/[pid]/root/
.proc(5)
).
입력하시면 매우 편리합니다.PID 네임스페이스그런 다음 올바른 PID 를 /proc/1/root/
검색할 필요가 없습니다.
PID 네임스페이스에 있으면 디버거를 연결하려는 프로세스가 컨테이너 내부의 PID 1(또는 PID 2)이 될 것임을 알고 있는 경우에도 매우 편리할 수 있습니다. 또는 애플리케이션/컨테이너가 다중 프로세스인 경우 즐겨찾는 ps
명령을 사용하여 다양한 프로세스를 볼 수 있습니다.