Docker ポート マッピングと外部アクセス不可の問題

Docker ポート マッピングと外部アクセス不可の問題

Docker コンテナはサービスを提供し、ポート 8888 をリッスンします。外部からアクセスできるようにするには、ポート マッピングが必要です。

docker run -it --rm -p 8888:8888 サーバー:v1

この時点で問題が発生します。仮想マシン A にデプロイした後、8888 ポート サービスは A ではアクセスできますが、B ではアクセスできません。

これはリクエストが傍受されたために発生するはずです。

1. ファイアウォール-cmd --stateを確認する

出力が「not running」の場合、FirewallD は実行されておらず、すべての保護ポリシーが開始されていません。この場合、ファイアウォールが接続をブロックしている可能性は排除できます。

出力が「running」の場合、FirewallD が現在実行中であることを意味します。現在開いているポートとサービスを表示するには、次のコマンドを入力する必要があります。

ファイアウォールコマンド --list-ports
ファイアウォールコマンド --list-services

解決策は2つあります。

1. FirewallD サービスをオフにします。

ファイアウォールが不要な場合は、FirewallD サービスをオフにしてください。

systemctl 停止 ファイアウォールd.service

2. 指定したポートを外部に開くポリシーを追加します。

たとえば、外部の 5000/tcp ポートを開きたい場合は、次のコマンドを使用できます。

ファイアウォールコマンド --add-port=5000/tcp --permanent
ファイアウォール-cmd --reload

ポートを一時的にのみ開きたい場合は、コマンドの最初の行にある「--permanent」パラメータを削除します。その後、FirewallD サービスを再起動すると、このポリシーは無効になります。

2. IP転送がオンになっていない

sysctl net.ipv4.ip_forward

net.ipv4.ip_forward=0 と表示される場合は有効になっていません。

3. サービスiptablesがオンになってブロックされている

iptablesサービスをオフにすることができます

サービスiptables停止

docker の実行中にエラーが発生した場合:

iptables: その名前のチェーン/ターゲット/一致はありません。

その後、dockerサービスを再起動するだけです

サービスdockerの再起動

または:

#iptablesファイアウォールをスタートアップ項目として設定する systemctl enable iptables.service

#設定ファイルを有効にするためにファイアウォールを起動します systemctl start iptables.service

#ファイアウォールを停止します systemctl stop iptables.service

#設定ファイルを有効にするためにファイアウォールを再起動します systemctl restart iptables.service

最終版:

docker を起動してポートをマッピングすると、docker は iptables に DNAT ルールを追加し、対応するポートから受信したパケットを IP に変換して転送します。同時に、docker ドメインのすべての IP を変換するルールも追加されます。

しかし、Centos7ではdockerは正常に外部ネットワークにアクセスできるものの、外部ネットワークから送信されたリクエストはeth1で受信・転送された後docker0に届けられない、もしくは届けられても(oui Unknown)という状況が出てしまいます。 DNAT 後にデータが docker0 に配信できない理由は不明です。

最終的な解決策は、dockerを起動した後にiptablesを再起動することです。

サービスiptablesを再起動

dockerによって追加されたすべてのルールをクリアし、ルールを追加します

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j マスカレード

Docker からのすべてのパッケージの IP アドレス 172.17.0.0/16 をローカル IP アドレスに置き換えて送信し、Docker が外部ネットワークにアクセスするという目的を達成します。

これで、docker ポート マッピングと外部アクセス不可に関するこの記事は終了です。docker ポート マッピングと外部アクセスの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 実行中のDockerコンテナのポートマッピングを変更する方法
  • ポートマッピング後に Docker コンテナが突然接続に失敗する問題のトラブルシューティング プロセス
  • Dockerコンテナの起動後にポートマッピングを追加する
  • Docker で実行中のコンテナのポート マッピングを設定する方法
  • Dockerコンテナの4つのポートマッピングのデモンストレーションと分析

<<:  Vue は Axios リクエスト フロントエンドのクロスドメイン問題をどのように解決するのか

>>:  フォーム入力ボックスに関するWebデザインのヒント

推薦する

Pure CSS と Flutter はそれぞれブリージング ライト効果を実現します (サンプル コード)

前回、非常に熱心なファンから、月を呼吸する光の効果にできるかどうか尋ねられました。月の大きさの写真が...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...

EChartsマウスイベント処理方法の詳細な説明

イベントとは、クリック、マウスオーバー、ページの読み込み後にトリガーされる読み込みイベントなど、ユー...

仮想マシンに Windows Server 2008 オペレーティング システムをインストールする

この記事では、Windows Server オペレーティング システムのインストールと企業でのそのア...

Zabbix動的実行監視収集スクリプトの実装原理

Zabbix カスタム スクリプトを使用して監視データを収集する場合、通常、次の問題が発生します。サ...

Dockerイメージが消える問題を解決する

1. 50と93では鏡像が消える [root@h50 /]# df -h ファイルシステムの使用済み...

イベントバブリング、イベントキャプチャ、イベント委任に基づく詳細な説明

イベントバブリング、イベントキャプチャ、イベント委任JavaScript では、イベント委譲は非常に...

ノードスクリプトで自動サインインと抽選機能を実現

目次1. はじめに2. 準備3. スクリプトプロジェクトの構築4. コードの作成と実行5. まとめと...

Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する

問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...

docker compose の使い方の詳しい説明

目次Docker Compose の使用シナリオ基本的なデモ基本的な操作とメンテナンスdocker-...

MySql 8.0 と対応するドライバー パッケージの一致に関する注意事項

MySql 8.0 対応ドライバパッケージのマッチングMySql データベースをバージョン 8.0 ...

JS正規RegExpオブジェクトについての簡単な説明

目次1. RegExpオブジェクト2. 文法2.1 定義2.2 修飾子2.3 角括弧2.4 メタ文字...

Node.jsミドルウェアの仕組みの詳細な説明

目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...

CSS 透明ボーダー背景クリップマジック

この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...

HTMLフロートの使用法の簡単な分析

float の使用例左サスペンション: float:left;右サスペンション: float:rig...