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+スクリプト設定+ts+Vite+Volarプロジェクト

目次Viteを使用してvue + tsプロジェクトを作成するVue 3の3つの構文オプションAPIコ...

タグのhref属性とonclickイベントの使用例

a タグは主にページ ジャンプを実装するために使用され、これは href 属性または onclick...

LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)

[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...

Windows 10 での MySQL 5.7.21 winx64 のインストールと設定方法のグラフィック チュートリアル

mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...

サイバーパンクスタイルのボタンを実現するためのHTML+CSS

まず効果を見てみましょう: 序文:このアイデアは、Bilibili のアップロード者 Steven ...

Docker初心者が初めてよく使うコマンドを試してみる練習記録

Docker を正式に使用する前に、まず Docker でよく使用されるコマンドに慣れておきましょう...

Vueプロジェクトでよく使われる実践的なスキルのまとめ

目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...

Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

1. コンセプト1. ホットバックアップとバックアップの違いホット バックアップは高可用性 (HA)...

MySQLフィルタリングレプリケーションのアイデアの詳細な説明

目次mysql フィルター レプリケーションメインデータベースに実装ライブラリから実装いくつかの質問...

Zabbix 監視 Docker アプリケーション構成

コンテナの応用はますます一般的になっていますが、大量のコンテナをどのように管理すればよいのでしょうか...

JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明

目次導入アイデアID配列インデックスのマッピング関係を確立するツリー構造の構築原理要約する導入組織階...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

Typescriptの基本構文13個を共有する

目次1. Tsとは何か2. 基本的な文法1. プリミティブデータ型を宣言する2. オブジェクト型を宣...

MySQL UNION演算子の基本知識ポイント

MySQL UNION 演算子このチュートリアルでは、MySQL UNION 演算子の構文と例を紹介...

Win10+Ubuntu 20.04 LTS デュアル システム インストール (UEFI + GPT) (画像とテキスト、複数の画像には注意)

Win10 のインストール (すでにインストールされている場合はスキップしてください) win10...