Dockerコンテナを外部IPとポートにバインドする方法

Dockerコンテナを外部IPとポートにバインドする方法

Docker を使用すると、外部からコンテナにアクセスしたり、コンテナを相互接続したりすることで、ネットワーク サービスを提供できます。

以下の操作は、myfirstapp イメージを通じてシミュレートされます。myfirstapp イメージの作成方法については、ここをクリックしてください。

1. 外部アクセスコンテナ

コンテナが起動すると、コンテナ内でいくつかのネットワーク アプリケーションを実行できるようになり、-p または -P パラメータを使用してポート マッピングを指定できます。

a. -P (大文字) フラグを使用すると、Docker はランダムにポートを選択し、コンテナ内の開いているネットワーク ポートにマップします。

$ docker run -d -P myfirstapp python app.py 
$ docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
dbcf5d3290ba myfirstapp "python app.py" 4秒前 4秒前 0.0.0.0:32770->80/tcp quizzical_engelbart

このとき、ローカルマシンのポート 32770 にアクセスすると、コンテナ内の Web アプリケーションが提供するインターフェースにアクセスできます。

$ カール http://192.168.1.160:32770/
<h3>こんにちは、こんにちは!</h3><b>ホスト名:</b> dbcf5d3290ba<br/><b>訪問数:</b> <i>Redis に接続できません。カウンターが無効です</i> 

dockerログを使用してアプリケーション情報を表示することもできます

$ docker ログ dbcf5d3290ba
* http://0.0.0.0:80/ で実行中 (終了するには CTRL+C を押してください)
192.168.1.5 - - [2018/03/29 06:17:34] "GET / HTTP/1.1" 200 -
192.168.1.5 - - [2018/03/29 06:17:34] "GET /favicon.ico HTTP/1.1" 404 -
192.168.1.160 - - [2018/03/29 06:17:43] "GET / HTTP/1.1" 200 -
192.168.1.5 - - [2018/03/29 06:18:59] "GET / HTTP/1.1" 200 -

b. -p (小文字) フラグを使用すると、マップするポートを指定できます。指定されたポートにバインドできるコンテナーは 1 つだけです。サポートされている形式は次のとおりです。

ip:ホストポート:コンテナポート 
ip::コンテナポート 
ホストポート:コンテナポート

$ docker run -d -p 4000:80 myfirstapp python app.py
$ docker run -d -p 4001:80 myfirstapp python app.py
$ カール http://192.168.1.160:4000/
こんにちは!ホスト名: f43ed2810353
訪問数:Redis に接続できません。カウンタが無効です
$ カール http://192.168.1.160:4001/
こんにちは! ホスト名:f43ed2810353
訪問数:Redis に接続できません。カウンタが無効です

ローカル ポート 4000 がマップされており、別のポート 4001 もマップされていることがわかります。

デフォルトでは、Docker はすべてのローカル アドレスをマップします。次に、指定されたポートを指定されたアドレスにマッピングしてみます。

$ docker run -d -p 127.0.0.1:4000:80 myfirstapp python app.py
$ curl http://127.0.0.1:4000/ ## $ curl http://localhost:4000/ 経由でアクセス ## $ curl http://192.168.1.160:4000/ 経由でアクセス ## アクセス拒否 curl: (7) 192.168.1.160:4000 への接続に失敗しました。接続が拒否されました

その後、コンテナ内のアプリケーションにアクセスするには、IP アドレス 127.0.0.1 経由でのみアクセスできるようになります。

次のステップは、ローカルマシンの任意のポートをコンテナのポート80にバインドし、ランダムにポートを割り当てることです。

$ docker run -d -p 127.0.0.1::80 myfirstapp python app.py
$ docker ps ##127.0.0.1:32770->80/tcp
$ curl http://127.0.0.1:32770/ ## $ curl http://localhost:32770/ 経由でアクセス ## $ curl http://192.168.1.160:32770/ 経由でアクセス ## アクセスが拒否されました

通信プロトコルも指定できます

docker run -d -p 5003:80/udp myfirstapp python app.py

2. コンテナにバインドされマップされているポートとIPアドレスを表示する

$ docker port 44de1b0b5312 (コンテナID)
80/tcp -> 127.0.0.1:32770

3. 注意事項

a.dockerinspect でコンテナの内部ネットワークと IP アドレスを表示する

$ docker examine 44de1b0b5312 (コンテナID)

b. コンテナの起動時に複数のIPアドレスをバインドする

$ docker run -d -p 5005:5000 -p 5006:80 myfirstapp python app.py #コンテナID: 44e703c1279a
$ docker ポート 44e703c1279a
5000/tcp -> 0.0.0.0:5005
80/tcp -> 0.0.0.0:5006

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker で実行中のコンテナのポート マッピングを設定する方法
  • Dockerコンテナの起動後にポートマッピングを追加する
  • ポートマッピング後に Docker コンテナが突然接続に失敗する問題のトラブルシューティング プロセス
  • Dockerのポートマッピングとコンテナの相互接続の詳細な説明
  • Dockerでコンテナのポートマッピングを変更する方法の詳細な説明
  • Dockerコンテナがホストポートにアクセスできない場合の解決策
  • Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策
  • Dockerはコンテナにポートを動的に公開します
  • Dockerコンテナのネットワークポート設定プロセスの詳細な説明
  • 実行中のDockerコンテナのポートマッピングを変更する方法

<<:  MYSQL 文字関数を使用してデータをフィルタリングすることに関する質問

>>:  HTML+CSS+JS でキャンバスがマウスの小さな円に追従する特殊効果のソースコードを実現

推薦する

Vue ページ印刷で自動ページングを実装する 2 つの方法

この記事では、ページ印刷の自動ページングを実現するためのVueの具体的なコードを例として紹介します。...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

CSSでカスタムフォント(font-face)を導入する方法の詳細な説明

なぜこれを使ったのか?それはポスターを作ることから始まりました。それは嵐の夜でした。 。 。さて、無...

MacでMysqlのルートパスワードを忘れた場合の解決方法

長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...

CSS スキル コレクション - 古典の中の古典

リンク上の点線のボックスを削除しますコードをコピーコードは次のとおりです。 a:アクティブ、a:フォ...

docker-composeの詳細なインストールと使用方法

Docker Compose は、複雑なアプリケーションを定義および実行するための Docker ツ...

MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法

目次Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 2. クロージャの役割2.1) メモリ2.2) プライベート変数...

jQueryメソッド属性の詳細な説明

目次1. jQueryの紹介2. jQueryセレクター2.1 5つの基本セレクタ2.2 4種類の関...

Nginx ストリーム構成プロキシ (Nginx TCP/UDP ロード バランシング)

序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...

モバイルフロントエンド適応ソリューション(概要)

ネットで検索してみたところ、多くの面接でモバイル適応方法について質問されることが分かりました。最近い...

速度、読み込み、Web アプリケーションなどにおける div と table の違い。

1: 速度と読み込み方法の違いdivとtableの違いは速度ではなく、読み込み方法です。速度はネット...

JavaScriptは双方向リンクリストプロセス分析を実装します

目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...