gpt4 book ai didi

docker - docker 程序的进程所有者

转载 作者:行者123 更新时间:2023-12-02 21:14:29 26 4
gpt4 key购买 nike

我已经开始了nginx绑定(bind)在 host 上的容器网络如下:

docker run --rm -d --network host --name mynginx nginx

但是,当使用 ss 查询进程信息时命令,这似乎是一个纯粹的 nginx但是 不是 一个 docker过程:
$ ss -tuap 'sport = :80'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:http 0.0.0.0:* users:(("nginx",pid=16563,fd=6),("nginx",pid=16524,fd=6))

这是为什么?

最佳答案

您将 nginx 进程配置为在主机网络命名空间 --net host 中运行.在该模式下,您无需设置从主机到容器网络的端口转发(例如 -p 80:80 )。如果您完成了端口转发,您会在主机上看到一个 docker 进程,该进程正在转发到 nginx 进程的容器命名空间中的同一端口。

请记住,容器是一种通过内核选项运行应用程序的方法,例如命名空间,它不是在单独的操作系统下运行的 VM,因此您将看到进程正在运行并且端口直接在主机上打开。

下面是一个示例,说明如果您转发端口而不是使用主机网络命名空间会是什么样子,以及如何查看容器内的网络命名空间:

$ docker run --rm -d -p 8000:80 --name mynginx nginx                                                                                
d177bc43166ad59f5cdf578eca819737635c43b2204b2f75f2ba54dd5a9cffbb

$ sudo ss -tuap 'sport = :8000'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 :::8000 :::* users:(("docker-proxy",pid=25229,fd=4))

$ docker run -it --rm --net container:mynginx --pid container:mynginx nicolaka/netshoot ss -tuap 'sport = :80'
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:http *:* users:(("nginx",pid=1,fd=6))
docker-proxy进程有 docker 将端口转发到容器的默认方式。

关于docker - docker 程序的进程所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52125577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com