2017-04-24 2 views
0

나는 도커에 익숙하지 않으며 nginx를 실행하는 데 문제가 있습니다. 모두 옳은 것처럼 보입니다. nginx는 "컬 (curl)"을 사용하여 호스트에서 연결할 수 있습니다. iptables는 도커 가상 인터페이스에 대한 새로운 규칙을 설정합니다.nginx 도커 이미지에 연결할 수 없습니다.

하지만 인터넷에서 nginx에 연결할 수 없습니다. 다음으로 내가 데비안을 사용하고

(제시)은

Linux h2127057 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux 

고정 표시기

Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  
tcp  0  0 0.0.0.0:514    0.0.0.0:*    LISTEN  
tcp  0 216 X.X.X.X:22    X.X.X.X:64103  VERBUNDEN 
tcp6  0  0 :::443     :::*     LISTEN  
tcp6  0  0 :::514     :::*     LISTEN  
tcp6  0  0 :::80     :::*     LISTEN  

의 iptables 규칙을주고있다 버전

Docker version 17.03.1-ce, build c6d412e 

에서 netstat입니다

-P INPUT ACCEPT 
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-N DOCKER 
-N DOCKER-ISOLATION 
-N fail2ban-pam-generic 
-N fail2ban-ssh 
-N fail2ban-ssh-ddos 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 25 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 465 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 587 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 110 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 995 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 143 -j ACCEPT 
-A FORWARD -d 172.24.18.12/32 -p tcp -m tcp --dport 993 -j ACCEPT 
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT 
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT 

이미 알 수 있듯이 다른 서브넷에 이미 규칙이 있습니다. 이것은 일반 LXC를 사용하는 나의 오래된 가상 인프라입니다.

문제가 생길 수 있습니까?

이 다윗이

+0

그러나 앱이 호스트에서 볼 수 있다면 특정 포트에서이 포트를 (호스트에서) 전세계로 열면됩니다. etc/hosts에 도메인을 추가하십시오. IMO 도커와 함께 할 것은 없습니다. – barat

+0

여기에 기계에 포트를 노출하는 방법이 나와 있습니다. 'docker run -d -p 80:80 -p 443 : 443 nginx' – David

+0

이제 라우터/방화벽/어떤 종류의 포트가 들어오는 포트 80이있는 것처럼 보입니다./443 인터넷에서 귀하의 호스트로. OS/라우터에서 포트를 여는 방법을 찾아야합니다. 호스트에서 nginx가 localhost : 80으로 이동하여 페이지를 볼 수 있다면 포트를 연 후 YOURXTERNALIP : 80 (또는 127.0.0과 같은 호스트/호스트에 추가하는 경우 somedomain.tld)에서 연결할 수 있습니다.1 somedomain.tld) ​​ – barat

답변

0

좋아 도와 주셔서 모두 감사합니다,의는 제 결론에 도달하자

나는 아무 문제 LXC 컨테이너 내에서 웹 서버를 실행하고 포트 포워딩의 iptables를 사용하여이 없습니다. 모든 것이 잘 작동합니다. 잘 했어!

iptables가 올바르게 설정되어 있고 도커가 포트를 노출하고있는 경우에도 도커와 동일한 기능을 사용해도 웹 서버에 외부에서 연결할 수 없습니다. 작동 안함!

모든 컨테이너 (LXC 및 도커)를 중지하고 베어 메탈 웹 서버를 실행하면 외부 IP 주소를 가리키는 iptables에서 규칙을 지정해야합니다. 인터넷에서 도달 할 수있을 것입니다.

그렇다면 왜 docker-nginx-image를 제외하고 모든 것이 제대로 작동합니까?

매우 이상한 :-(

편집 :., 나는 그것이 모든 LXC 및 고정 표시기 용기를 죽이는 iptables에 홍조와 fail2ban 정지 후 !! 좋아 가지고! 모든 작업이 정상적으로 시작하더라도 fail2ban 후 . 고정 표시기 내가 iptables에 충분히 깊은하지 않다 당신을 위해 모든 iptables에-규칙을 관리 할 수 ​​있지만, 당신이 당신의 고정 표시기 체인 "전에"는 FORWARD 체인이있는 경우는 문제를 만드는

: 모든 ...

나를 위해 의미합니다.
관련 문제