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

推薦する

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

Navicat でストアド プロシージャ、トリガーを作成し、カーソルを使用する簡単な例 (画像とテキスト)

1. テーブルを作成する<br /> まず、2 つのテーブル (users テーブルと...

Vue で CSS カスタム変数を使用する方法

目次CSS カスタム変数機能は古くから存在していますが、実際の開発ではあまり使用されていません。その...

CentOS 8 Zabbix 4.4 インストール ガイド

Zabbix サーバー環境プラットフォームZABBIX バージョン 4.4セントOS8 MySQL ...

vue.config.js パッケージ最適化構成

Baiduの情報は多様すぎて目が回ります。心配しないでください。私はあなたのためにそれを体験しました...

1 つの記事で Node.js の非同期プログラミングを学ぶ

目次 はじめに 同期 非同期とブロッキング JavaScript のノンブロッキング コールバック ...

Reactはルーティングを使用してログインインターフェースにリダイレクトします

前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後...

mysql の追加、削除、変更、クエリの基本ステートメント

文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード

目次コンポーネントインフラストラクチャ目的: 画像拡大鏡機能を実現するvueuseをインストールする...

MySQL ルートパスワードを変更する複数の方法 (推奨)

方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...

ECMAScript6 におけるマップマッピングの基本概念と一般的な方法

目次マッピングとは何かオブジェクトとマップの違いマップの共通メソッド宣言と初期化割り当てセットキー値...

Dockerは終了状態で起動します

docker run後、ステータスは常にExitedになります解決:パラメータを追加: -it do...

Ant Design Blazor コンポーネントライブラリのルーティング再利用マルチタブ機能

最近、Ant Design Blazor コンポーネント ライブラリにマルチタブ コンポーネントを実...