dockerコンテナは直接実行され、pingを介してパブリックIP操作を取得します。

dockerコンテナは直接実行され、pingを介してパブリックIP操作を取得します。

コンテナを通じてローカル パブリック IP アドレスを取得します。ローカル IP アドレスを使用して複数のサービスを登録できます。

コマンドを ping に変更すると、異なるサーバー情報を取得できます。

パブリック静的文字列 getIfconfigIP()
  {
    BufferedReader in = null;
    文字列アウトライン = "";
    // タイムアウトウィンドウはミリ秒単位、Linux では秒単位です
    Runtime r = Runtime.getRuntime(); // 実行する ping コマンド。このコマンドは Windows 形式のコマンドです。 String pingCommand = " curl ifconfig.me "; // Windows システム String os = System.getProperty("os.name").toLowerCase();
    (os.indexOf("linux")> = 0の場合)
    {
      pingコマンド = " curl ifconfig.me ";
    }
    (os.indexOf("mac")> = 0の場合)
    {
      pingコマンド = " curl ifconfig.me ";
    }
    試す
    { // コマンドを実行して出力を取得します。System.out.println(pingCommand);
      プロセス p = r.exec(pingCommand);
      (p == null)の場合
      {
        「cmd が失敗しました」を返します。
      }
      in = new BufferedReader(new InputStreamReader(p.getInputStream())); // 出力を行ごとにチェックし、類似の発生箇所を計算する = 23ms
      // TTL=62 が表示された回数 int connectedCount = 0;
      文字列行 = null;
 
      ((line = in.readLine()) != null) の場合
      {
        アウトライン += 線;
      }
      概要を返します。
    }
    catch (例外例)
    {
      ex.printStackTrace(); // 例外が発生した場合は false を返します return outline;
    }
    ついに
    {
      試す
      {
        in.close();
      }
      キャッチ (IOException e)
      {
        e.printStackTrace();
      }
    }
 
  }

docker の IP は偽物です。docker で実行されているプログラムでホスト マシンの IP アドレスを取得するにはどうすればよいでしょうか?

ここにいくつかのヒントがあります

p = require('child_process')
   .spawnSync('curl', ['ifconfig.io'])
   .stdout
   .toString()
   。トリム()

追加知識: Docker ネットワークの問題。Docker コンテナ内でホスト マシンの外部 IP アドレスに ping できませんが、他のマシンの外部 IP アドレスに ping できます。

問題の説明

マシンAとマシンBはそれぞれ独自の内部IPと外部IPを持ちます。例:A-IP-internal、A-IP-external

B-IP-inside、B-IP-outside、マシン A のドメイン名は www.xxx.com です。

マシンAにJenkins Dockerコンテナをインストールし、起動してコンテナに入ります。

#docker exec -it ジェンキンス /bin/sh

次に、コンテナ内のホスト A のイントラネット IP に ping を実行すると、正常に動作します。

#ping A-IP-nei (172.16...) //pingが成功したことを返します

#ping A-IP-outside (202.106...) // Ping 失敗

#ping www.xxx.com // はマシン A の外部 IP アドレスに正しく解決されますが、ping は失敗します

#ping baidu.com // 正常にpingできました。

加えて:

1. Docker コンテナ外部のホストマシン A から、A-IP-outside (202.106...) への ping が成功します。

2. マシン B に Jenkins コンテナをインストールし、コンテナ内から A-IP-external (202.106...) に ping を実行します。

2. マシン B に Jenkins コンテナをインストールします。コンテナ内から B-IP-external (202.106…) に ping を実行しても失敗します。

さまざまなネットワークの問題を調べたり、コンテナやイメージを削除したり、docker を再インストールしたりしても、すべて機能しません。

要約すれば:

Docker コンテナでホストのパブリック IP を ping するにはどうすればよいですか?

マシン A のコンテナー内の www.xxx.com に ping を実行する必要があります。これは、マシン A のイントラネット アドレスに解決されます。

マシン A のイントラネット アドレスはコンテナ内から ping できるためです。

新しく変更された docker-compose ファイル

追加ホスト:

- 「www.xxx.com:172.16.xxx.A」

dockerコンテナを再構築した後、dockerコンテナに入ります

#ping A-IP-outside(202.106…) //ping は成功し、OK は要件を満たしています。

ping を介して直接実行して Docker コンテナのパブリック IP アドレスを取得する方法に関する上記の記事が、私が皆さんと共有できるすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • Docker MySQLコンテナデータベースへの変更が有効にならない問題を解決する
  • Docker ファイルの保存パス、コンテナの起動コマンド操作の取得
  • Linux の Docker コンテナで bash を終了する 2 つの方法
  • 停止したすべてのDockerコンテナを1つのコマンドで再起動する
  • docker version es、milvus、minio 起動コマンドの詳細な説明
  • Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します
  • dockerログマウントの問題を解決する

<<:  Vue での ElementUI の使用に関する詳細な説明

>>:  MySQL 8.0.22 解凍版インストールチュートリアル(初心者向け)

推薦する

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...

データバインディングとリストデータの表示にはVue3を使用する

目次1. Vue2との比較1. Vue3の新機能2. Vue2とVue3の応答原理の比較3. 配列の...

SHTML 簡潔なチュートリアル

SHTMLとASPは似ています。SHTMLという名前のファイルでは、SSIの命令がASPの命令と同じ...

TypeScript とは何ですか?

目次1. JavaScriptの問題2. TypeScriptの利点3. TypeScriptの欠点...

Vueカスタムテーブル列実装プロセス記録

目次序文レンダリングsetTable コンポーネント使用結論序文フォームを使用して PC 側のプロジ...

Dockerをクリーンアンインストールする方法の詳細な説明

まず、サーバー環境情報: アンインストールの理由:しばらくするとホストマシンのディスクが100%にな...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

Vue ベースの Excel 解析とエクスポートの詳細な説明

目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...

JavaScript で支払いの 10 秒カウントダウンを実現

この記事では、支払いの10秒カウントダウンを実現するためのJavaScriptの具体的なコードを参考...

HTML ウェブページ画像タグ

画像タグ <IMG> を挿入します。今日私たちが目にするカラフルなウェブページはすべて、...

あまり一般的ではないが便利な CSS 属性操作の完全ガイド

1. カスタムテキスト選択 ::選択{ 背景: 赤; 色: 黒; } 2. ビデオコントロールからダ...

Dockerコンテナでyumを呼び出すときのエラーの解決方法

dockerfile またはコンテナ内で yum を実行すると、エラーが報告され、ソースが見つかりま...

自動検索提案機能のスタイルファイルを入力します: suggestion.css

コードをコピーコードは次のとおりです。 .sugLayerDiv{位置:相対; overflow:h...