2 个 Linux 容器之间的连接被拒绝

2 个 Linux 容器之间的连接被拒绝

在我的主机 Ubuntu 18.04 上,我使用默认设置运行两个 lxc 容器。容器也使用 Ubuntu 18.04。我有一个在 container1 上运行的应用程序,它在 https://localhost:3000/ 上提供基于 https 的服务。 Container2 甚至无法与container1 建立连接。

Container2 可以 ping 容器 1 并读取在 localhost 上运行的默认 Apache2 服务器的 html(对于容器 1)。使用 netcat 进行测试,我可以与几个主要端口建立连接,但是端口 3000 的连接被拒绝。

root@c2:~# nc -zv c1 22
Connection to c1 22 port [tcp/ssh] succeeded!
root@c2:~# nc -zv c1 80
Connection to c1 80 port [tcp/http] succeeded!
root@c2:~# nc -zv c1 443
nc: connect to c1 port 443 (tcp) failed: Connection refused
nc: connect to c1 port 443 (tcp) failed: Connection refused
root@c2:~# nc -zv c1 3000
nc: connect to c1 port 3000 (tcp) failed: Connection refused
nc: connect to c1 port 3000 (tcp) failed: Connection refused

同样的情况也适用于我的主机和任何容器之间。默认情况下似乎只能访问端口 22 和 80。我尝试在所有容器上启用 ufw,但仍然无法解决:

root@c1:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
873                        ALLOW       Anywhere                  
3000                       ALLOW       Anywhere                  
Anywhere on eth0@if16      ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
20                         ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
873 (v6)                   ALLOW       Anywhere (v6)             
3000 (v6)                  ALLOW       Anywhere (v6)             
Anywhere (v6) on eth0@if16 ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
20 (v6)                    ALLOW       Anywhere (v6)             

Anywhere                   ALLOW OUT   Anywhere on eth0@if16     
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on eth0@if16

即使通过curl 进行测试也清楚地表明端口连接已关闭,这就是问题所在:

root@c2:~# curl https://10.155.120.175:3000/
curl: (7) Failed to connect to 10.155.120.175 port 3000: Connection refused

我已经被这个问题困扰了一个星期了,有人能帮我解决这个问题吗?

编辑(附加数据):

容器 1 上的 netstat 结果:

root@c1:~# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      289/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1385/sshd           
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      293/MyApp           
tcp6       0      0 :::80                   :::*                    LISTEN      310/apache2         
tcp6       0      0 :::22                   :::*                    LISTEN      1385/sshd  

答案1

端口 3000 仅侦听localhost.您需要正确配置应用程序,以便端口开放0.0.0.0(正如您在其他端口中看到的那样)。

相关内容