Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker程序的进程所有者_Docker_Nginx_Process_Ss - Fatal编程技术网

docker程序的进程所有者

docker程序的进程所有者,docker,nginx,process,ss,Docker,Nginx,Process,Ss,我在主机网络上启动了一个nginx容器绑定,如下所示: docker run --rm -d --network host --name mynginx nginx 但是,当使用ss命令查询流程信息时,这似乎是一个纯粹的nginx但不是docker流程: $ ss -tuap 'sport = :80' Netid State Recv-Q Send-Q

我在
主机
网络上启动了一个
nginx
容器绑定,如下所示:

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))

这是为什么?

我恐怕这里对所谓的
docker流程有一些误解

首先,
ss
命令没有显示它是什么类型的进程。它可能会显示应用程序名称(
nginx
此处)。但我们不能说它是所谓的
纯nginx进程

您可以尝试
pwdx nginx\u pid
。否则,每个正在运行的容器都是一个进程,我们可以在其主机上用ps-ef检查它


最重要的是,您可以使用
ps-ef | grep nginx
pwdx nginx_pid
来了解它是一种什么样的过程。

恐怕这里对所谓的
docker过程有一些误解

首先,
ss
命令没有显示它是什么类型的进程。它可能会显示应用程序名称(
nginx
此处)。但我们不能说它是所谓的
纯nginx进程

您可以尝试
pwdx nginx\u pid
。否则,每个正在运行的容器都是一个进程,我们可以在其主机上用ps-ef检查它


最重要的是,您可以使用
ps-ef | grep nginx
pwdx nginx_pid
找出它是什么类型的进程。

您将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代理进程docker将端口转发到容器的默认方式。

您已将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将端口转发到容器的默认方式