Docker 컨테이너 포트를 8002에서 443으로 전달하지 못함

Docker 컨테이너 포트를 8002에서 443으로 전달하지 못함

나는 iptables와 다양한 규칙의 모든 뉘앙스에 익숙하지 않습니다. 배우고 있지만 속도를 높여야 하므로 여기에 질문합니다.

AWS EC2 인스턴스의 Docker 내에서 WebLogic 컨테이너를 실행하고 있습니다. 컨테이너가 를 사용하여 실행 중입니다 docker run -d -p 8002:8002 weblogic. 이 이미지를 제가 만든 것이 아니기 때문에 뭔가가 남아 있어야 합니다. 네트워크 제한으로 인해 WebLogic 서버가 포트 8002를 통해 액세스하도록 구축되었음에도 불구하고 포트 443을 통해 외부에서 액세스할 수 있어야 합니다.

다양한 iptables 규칙을 시도했지만 그 중 어느 것도 성공적으로 전달할 수 없었습니다. 규칙이 8002 -> 443을 전달하도록 설정되어 있어도 컨테이너는 8002에서 계속 액세스할 수 있습니다.

실행 RHEL 7.3하면 Dockerfile이 방화벽이 아닌 iptables용으로 빌드됩니다. 내가 통제할 수 없는 것들이 있기 때문에 내가 가진 것을 가지고 일해야 합니다.

내가 시도한 iptables 명령 중 하나는 다음과 같습니다.

iptables -t nat -A OUTPUT -p tcp --dport 8002 -j DNAT --to-destination 127.0.0.1:443

참고: 나는 service iptables save. 를 사용하여 규칙이 존재하는지 확인할 수 있습니다 iptables -S.

편집: 현재 iptables 규칙은 다음과 같습니다.

-P INPUT ACCEPT  
-P FORWARD ACCEPT  
-P OUTPUT ACCEPT  
-N DOCKER  
-N DOCKER-ISOLATION  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p icmp -j ACCEPT  
-A INPUT -i lo -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT  
-A INPUT -j REJECT --reject-with icmp-host-prohibited  
-A FORWARD -j DOCKER-ISOLATION  
-A FORWARD -o docker0 -j DOCKER  
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT  
-A FORWARD -i docker0 -o docker0 -j ACCEPT  
-A FORWARD -j REJECT --reject-with icmp-host-prohibited  
-A FORWARD -i eth0 -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 8002 -j  ACCEPT  
-A DOCKER-ISOLATION -j RETURN

답변1

해서는 안 된다Docker이미지를 다시 빌드하지 않고 내부에서 실행 중인 컨테이너의 포트를 변경합니다 . EXPOSE이 수준의 명령 Dockerfile은 컨테이너의 포트 노출을 담당합니다. 다음 명령을 사용하여 노출된 컨테이너 포트를 확인할 수 있습니다.

docker inspect <image-name>

설명서에 나와 있듯이 서버는 weblogic기본적으로 실행됩니다. TCP/8002따라서 에서 컨테이너에 액세스할 수 있기를 원한다고 가정하고 443다음을 입력합니다.

docker run -d -p 443:8002 weblogic

NAT단지 -s TCP/443(호스트 수준) -> (컨테이너 네임스페이스 수준) 입니다 TCP/8002. iptables거기에서도 이것을 볼 수 있습니다 .

iptables -t nat -L

다음을 통해 표시됩니다.

docker ps 

다음 텍스트가 표시됩니다.0.0.0.0:443->127.0.0.1:8002

다음 단계. iptables을(를) 허용하려면 방화벽에 대한 (특정) 규칙을 추가해야 합니다 TCP/443.

그래서:

iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

이렇게 하면 트래픽 도착을 허용하도록 시스템의 방화벽을 구성하게 됩니다 TCP/443.

한 가지가 빠졌습니다. 에 대한 연결을 허용하려면 EC2와 연결된 보안 그룹을 구성해야 합니다 TCP/443.

이러한 배포는 프로덕션 준비가 완료된 것으로 간주되지 않습니다. 보안 및 인증서 관리부터 자동 서비스 재시작까지 많은 것을 놓치고 있습니다.

인용하다:

관련 정보