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