2개의 Linux 컨테이너 간 연결이 거부되었습니다.

2개의 Linux 컨테이너 간 연결이 거부되었습니다.

내 호스트 Ubuntu 18.04에서 기본 설정으로 두 개의 lxc 컨테이너를 실행하고 있습니다. 컨테이너는 Ubuntu 18.04도 사용합니다. https://localhost:3000/을 통해 https를 제공하는 컨테이너1에서 실행되는 애플리케이션이 있습니다. Container2는 Container1과의 연결조차 설정할 수 없습니다.

Container2는 컨테이너1에 대해 ping을 수행하고 localhost(container1의 경우)에서 실행되는 기본 Apache2 서버의 html을 읽을 수 있습니다. 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

컬을 통한 테스트에서도 포트 연결이 닫혀 있다는 것이 명확하게 표시되는데, 이것이 문제입니다.

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(다른 포트에서 볼 수 있듯이).

관련 정보