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コマンドの1つは次のとおりです。

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/8002iptablesそこでもこれを見ることができます。

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

このような展開は、本番準備が完了したとは見なされません。セキュリティと証明書の管理から自動サービスの再起動まで、多くを見逃しています。

引用:

関連情報