Docker でコンテナのポート マッピングを動的に変更する方法

Docker でコンテナのポート マッピングを動的に変更する方法

前書き: Docker のポート マッピングは、多くの場合、Docker Run コマンド中に -p を介してコンテナの内部ポートをホスト マシンの指定ポートにマッピングすることで行われます。一般的には、コンテナ ポートに対応するポートが事前に決定され、マッピングされます。ただし、場合によっては、一時的にポートをマッピングする必要があります。たとえば、Docker で MySQL コンテナを実行する場合、デフォルトのポートは開いていません。では、実行中のコンテナで指定されたポートを公開する方法はありますか?以下をお読みください--->

方法 1: Docker 構成ファイルを変更する (危険)

目標を達成するには、Docker 構成ファイルを変更する必要があります。一般的には、config.v2.json と hostconfig.json というファイルを変更する必要があります。デフォルトのパスは/var/lib/docker/containers/<容器名稱>です。

まず、 systemctl stop dockerを使用して Docker サービスをシャットダウンします。次に、config.v2.json ファイルの ExposedPorts 構成情報を変更して、コンテナーの内部ポート ("8080/tcp":{} など) を追加します。次に、hostconfig.json の PortBindings 構成情報を次のように変更します。

上記の設定が完了したら、 systemctl restart docker Docker サービスを再起動し、指定したコンテナを再起動して対応するポートにアクセスします。 (この方法はリスクがあり、頻繁に使用することはお勧めしません)

 「設定」: {
  「公開ポート」: {
   // 内部ポート 5432 マッピングを追加します "5432/tcp": {},
   "8080/tcp": {}
  },s
  ...
 },

「ポートバインディング」:{
  // 内部ポートと外部ポート 15432 を追加
  "5432/tcp":[
   {
    "ホストIP":"",
    "ホストポート":"15432"
   }
  ]、
  "8080/tcp":[
   {
    "ホストIP":"",
    "ホストポート":"28080"
   }
  ]
 },

方法2: Iptablesポート転送

Docker のネットワーク ポート マッピングの原則は、Iptables を介してポート転送を実現することです。この原則に基づいて、iptables を直接使用してポートをターゲット コンテナ IP に転送できます。ポート転送は次のコマンドを使用して実現できます。この方法は Iptables ルールに依存します。シナリオによっては、Iptables ルールの競合が発生し、コンテナの有効な起動に影響する可能性があります。

# ポートマッピング iptables -t nat -A DOCKER -p tcp --dport <コンテナの外部ポート> -j DNAT --to-destination <コンテナの IP>:<コンテナの内部ポート>
# ポートマッピングルールをキャンセルします iptables -t nat -D DOCKER -p tcp -d 0/0 --dport <コンテナの外部ポート> -j DNAT --to-destination <コンテナの IP>:<コンテナの内部ポート>

Docker でコンテナのポート マッピングを動的に変更する方法についての記事はこれで終わりです。Docker でコンテナのポート マッピングを変更する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 複数の Docker コンテナが同じポート番号を持たない場合の解決策
  • 実行中のDockerコンテナのポートマッピングを変更する方法
  • Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策
  • Dockerはポートを介してコンテナに接続します
  • Dockerはコンテナにポートを動的に公開します
  • Dockerコンテナがホストポートにアクセスできない場合の解決策
  • Dockerはコンテナポートバインディングのローカルポートを実装します

<<:  MySQL 集計統計データの低速クエリの最適化

>>:  JavaScript ES6 モジュールの詳細な説明

推薦する

Vue のライフサイクルとフック関数

目次1.ライフサイクルとは何か2. Vueのライフサイクル3. ライフサイクルフック関数1.ライフサ...

jQueryで劇場の座席選択と予約の効果を実現

jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...

HTML で自動ページジャンプを実現する 5 つの方法

前回の記事では、HTML ページが 3 秒後に自動的にジャンプする一般的な 3 つの方法を紹介しまし...

HTML マルチヘッダーテーブルコード

1. マルチヘッダーテーブルコードコードをコピーコードは次のとおりです。 <!DOCTYPE ...

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主...

Mysqlリモート接続構成を実装する2つの方法

Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...

MySqlサブクエリINの実装と最適化

目次IN が遅いのはなぜですか? INとEXISTSのどちらが速いでしょうか?効率を向上させるにはど...

docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。

問題点: docker run に -v パラメータを追加すると、コンテナは常に再起動状態になります...

MySQL Community Server 5.6.39 のインストール方法

この記事では、MySQLのダウンロードとインストールの詳細なチュートリアルを記載しています。具体的な...

キャッシュサーバーを構築するためのMemcached方式

序文多くの Web アプリケーションは、リレーショナル データベース管理システム (RDBMS) に...

Webpack4プラグインの実装原理についての簡単な説明

目次序文知る練習すれば完璧になる序文wabpack では、ローダーの他にプラグインがコア機能です。プ...

js 実行コンテキストとスコープの概要

目次序文文章1. JavaScriptコードの実行プロセスに関連する概念2. 実行コンテキストと実行...

他の人が私のウェブページを保存したり、サイトをコピーしたりするのを防ぐためのヒント

現在、インターネット上でウェブサイトをコピーすることは非常に一般的です。では、他人が私たちのウェブサ...

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

MySQLは集計関数を使用して単一のテーブルをクエリします

集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...