Virtual-Machine

2個linux容器之間的連接被拒絕

  • November 19, 2021

在我的主機 Ubuntu 18.04 上,我正在使用預設設置執行兩個 lxc 容器。容器也使用 Ubuntu 18.04。我有一個在 container1 上執行的應用程序,它在 https://localhost:3000/ 上提供基於 https 的服務。Container2 甚至無法與 container1 建立連接。

Container2 可以 ping container1 並讀取在 localhost 上執行的預設 Apache2 伺服器的 html(對於 container1)。使用 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

我在這個問題上卡了一個星期,有人可以幫我解決這個問題嗎?

編輯(附加數據):

container1 上 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  

埠 3000 僅偵聽localhost. 您需要正確配置您的應用程序,以便埠開放0.0.0.0(正如您在其他埠中看到的那樣)。

引用自:https://unix.stackexchange.com/questions/678254