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 モジュールの詳細な説明

推薦する

レアタグフィールドセットと凡例の使用方法の詳細な説明

<fieldset>と<legend>については、ほとんどの人はおそらく馴染...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

Web ページは何ピクセルで設計すればよいでしょうか?

多くのウェブデザイナーは、ウェブページのレイアウトを設計する際に、インターフェースウェブページの幅に...

dockerでifconfigが利用できない問題を解決する

最近、docker を学習していたときに、docker コンテナ内のネットワーク状態を照会するために...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

Vue-CLI マルチページディレクトリパッケージ化手順の記録

ページディレクトリ構造 デフォルトの HTML テンプレート ファイル public/index.h...

使用場所によって混乱しやすいXHTMLタグ

<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...

Chromeブラウザの自動パスワード保存プロンプト機能を無効にする方法

注: Web 開発では、フォームに autocomplete="off" を追加...

JQueryはアニメーション効果の非表示と表示を実装します

この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...

CSS 線形グラデーション凹型長方形遷移効果の実装

この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...

MySQLの重複排除操作を極限まで最適化する方法

目次1. インデックスと変数の賢い使用1. インデックスなしの比較テスト2. created_tim...

MySQL シリーズ データベース設計 3 つのパラダイム チュートリアルの例

目次1. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

vue-qr を使用して Vue の QR コードを生成する方法について深く理解する

目次npm ダウンロードステップ(1)輸入(2)vue-qrパラメータ例要約する「QRコード」の英語...