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 解凍版インストールチュートリアル(初心者向け)

推薦する

JavaScriptは文字の出現回数をカウントします

この記事の例では、文字の出現回数をカウントするJavaScriptの具体的なコードを参考までに共有し...

Vue はアップロードされた画像に透かしを追加する機能を実装します

この記事では、Vueでアップロードされた画像に透かしを追加する具体的な実装コードを参考までに共有しま...

MySQL カーディナリティ統計の簡単な分析

1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...

VMware Workstation 12 Pro Linux インストール チュートリアル

この記事は、VMware Workstation 12 ProのインストールLinuxチュートリアル...

Vue 天気予報入門

この記事では、参考までに天気予報を実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

電子メールの HTML ページを作成するための原則の概要

HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

CSS 手法を使用してモジュール性を実現する例

1. CSS 方法論とは何ですか? CSS methodologiesデザイン パターンまたは CS...

Vue フィルターの実装と適用シナリオの詳細な説明

1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...

Spark と Scala を使用して Apache アクセス ログを分析する方法

インストールまず、Java と Scala をインストールし、次に Spark をダウンロードしてイ...

ナビゲーションデザインと情報アーキテクチャ

<br />ナビゲーションについて話すときは、ほとんどの場合、ナビゲーションがコンテンツ...

Win10でIIS10を構成し、ASPプログラムのデバッグをサポートする手順

マイクロソフトIIS (Internet Information Server) は、Microso...

ページ下部のフッターを修正する方法(複数の方法)

フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...

Tomcatの全体構造の簡単な紹介

Tomcat は Web コンテナとして広く知られています。Java を学び始めたときから現在の仕事...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...