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

推薦する

Vue3 はメッセージコンポーネントの例を実装します

目次コンポーネント設計最終的なコンポーネントAPIの定義コンポーネント構造の定義テンプレートとスタイ...

Docker nginxは1つのホストを実装して複数のサイトを展開します

とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...

レスポンシブ Web デザインが価値のない 5 つの理由

この記事は Tom Ewer の Managewp ブログからのもので、現在人気のレスポンシブ デザ...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

JSキャンバスは描画ボードと署名ボードの機能を実現します

この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...

HTMLはWEB標準の開発の中心的な基盤です

HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...

docker インストール後に hello-world を実行する問題を解決する

yumを使用してcentos7.3にDocker V1.13.1をインストールしましたしかし、doc...

MYSQLでプロシージャの名前を変更する方法の詳細な説明

最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

MySQLがブール型を返すいくつかの状況について簡単に説明します。

mysqlはブール型を返します最初のケースでは、直接戻ります select id='22a...

Nginx 最適化サービスで Web ページ圧縮を実装する方法

リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...

Windows に MySQL 5.7.18 の解凍バージョンをインストールするチュートリアル

1. インストールプロセスMySQL バージョン: 5.7.18 1. my.ini ファイル(簡易...

MySQL 分離列とプレフィックスインデックスの使用の概要

目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...

sshとは何ですか?使い方は?どのような誤解があるのでしょうか?

目次序文SSHとは何かssh は何に使用されますか? sshの使い方ssh 再修正要約する序文ssh...