Docker端口转发创建两个进程

Docker端口转发创建两个进程,docker,docker-compose,lsof,Docker,Docker Compose,Lsof,从我的Docker容器中,我转发端口8545,如下所示 ports: - '127.0.0.1:8545:8545' 在运行容器之后,如果我运行lsof-I:8545,它将显示具有相同PID的两个进程 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME vpnkit 6576 Admin 27u IPv4 0xfdda6e6d5013cf77 0t0 TCP localhost

从我的Docker容器中,我转发端口
8545
,如下所示

ports:
      - '127.0.0.1:8545:8545'
在运行容器之后,如果我运行lsof-I:8545,它将显示具有相同PID的两个进程

COMMAND  PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
vpnkit  6576 Admin   27u  IPv4 0xfdda6e6d5013cf77      0t0  TCP localhost:8545 (LISTEN)
vpnkit  6576 Admin   28u  IPv6 0xfdda6e6d4509106f      0t0  TCP localhost:8545 (LISTEN)

为什么有两个进程在运行?

PID
列中可以看到,没有两个不同的进程。之所以
lsof
列出多个条目,是因为该工具向您显示了哪个进程对某些文件描述符有句柄,而在您的情况下,单个进程有两个句柄,因为它绑定在两个套接字上-IPv4和IPv6(如
TYPE
列下所示)

您可以使用
-i
参数两次来限制输出:

lsof -i 4 -i :8545
这会在端口和套接字上进行过滤,从而提供预期的输出。对于你最初的问题:从码头工人的角度来看,一切都很好