在Docker中使用PID隔離可以讓不同容器的進程ID不會相互干擾,確保容器的隔離性。在容器啟動時,Docker引擎會創建新的命名空間,并且在該命名空間中運行容器中的第一個進程(通常是init)。
$ docker run --pid=host ubuntu:latest ps
當我們指定PID隔離時,Docker會在新的命名空間中運行容器進程。默認情況下,這個PID命名空間是隔離的,也就是說,容器中的進程只能看到容器內部的進程。
比如,在容器內部運行ps命令,只會看到容器內部的進程:
$ docker run --pid=container:ubuntu:latest ps
但是,在容器外運行ps命令,只能看到容器內部init進程的PID:
$ ps -ef | grep
這個特性可以幫助我們限制容器內部進程的運行環境,讓容器更加安全。