コンテナの ネットワーク機能(networking)

コンテナが使うネットワークの種類とは、 bridgeoverlaymacvlan ネットワーク 、あるいは任意のネットワーク プラグインであり、コンテナ内からは見られません( 透過的(transparent) )。コンテナの視点からすると、コンテナにはネットワーク インタフェースがあり、IP アドレス、ゲートウェイ、ルーティング テーブル、DNS サービス、その他のネットワーク機能詳細があるように見えます(コンテナは none ネットワークを使っていないのを想定)。このトピックでは、コンテナ内の視点からネットワークについて考えます。

公開された(published) ポート

デフォルトでは、 docker createdocker run を使ってコンテナの作成時、コンテナ内のあらゆるポートは外の世界に対して公開されません。Docker の外でサービスに対するポートを有効にするには、あるいは、コンテナのネットワークに接続していない Docker コンテナに接続するには、 --publish-p フラグを使います。これにより、 Docker ホスト上にあるコンテナのポートを、外の世界に 割り当てる(map) ファイアウォールのルールを作成します。

フラグの値 説明
-p 8080:80 Docker ホスト上のポート 8080 に、コンテナ内の TCP ポート 80 を割り当て
-p 192.168.1.100:8080:80 Docker ホスト上のホスト IP 192.168.1.100 に対するポート 8080 に、コンテナ内の TCP ポート 80 を割り当て
-p 8080:80/udp Docker ホスト上のポート 8080 に、コンテナ内の UDP ポート 80 を割り当て
-p 8080:80/tcp -p 8080:80/udp Docker ホスト上の TCP ポート 8080 に、コンテナ内の TCP ポート 80 をわりあて。かつ、Docker ホスト上の UDP ポート 8080 に、コンテナ内の UDP ポート 80 を割り当て

IP アドレスとホスト名

デフォルトでは、Docker の各ネットワークに接続するコンテナに対し、 IP アドレスが割り当てられます。割り当てられる IP アドレスとは、ネットワークに割り当てがプール(保持)されているものです。そのため、 Docker デーモンは各コンテナに対する DHCP サーバとして事実上機能します。また、各ネットワークはデフォルトのサブネットマスクとゲートウェイも持ちます。

コンテナの起動時、コンテナは --network で指定した1つのネットワークに接続します。一方、実行中のコンテナは docker network connect を使えば、複数のネットワークに接続可能です。コンテナ起動時に --network フラグを使う場合は、 --ip--ipv6 フラグを使い、コンテナがネットワークに接続する IP アドレスを指定できます。

既存のコンテナが、 docker network connect を使った別のネットワークに接続する場合は、 --ip--ipv6 フラグを使うと、追加ネットワークに対するコンテナの IP アドレスを指定する命令になります。

同様に、コンテナのホスト名は、デフォルトでは Docker のコンテナ ID です。これは --hostname を使えば上書きできます。 docker network connect を使った既存のネットワークに接続する場合は、 --alias フラグを使い、そのネットワーク上でコンテナに対する追加のネットワーク エイリアス(別名)を指定できます。

DNS サービス

デフォルトでは、コンテナはホスト上の /etc/resolv.con で定義された DNS 設定を継承します。コンテナがデフォルトで使う bridge ネットワークでは、このファイルのコピーを取得します。一方で、 カスタム ネットワーク(use-user-defined-bridge-networks) を使うコンテナは Docker 内蔵 DNS サーバを使い、これは、ホスト上で設定された DNS サーバを使い、外部の DNS へ問い合わせを転送します。

/etc/hosts で定義されたカスタム ホストは継承されません。コンテナに追加のホストを渡したい場合は、 docker run リファレンス ドキュメントの コンテナの hosts ファイルにエントリ追加(--add-host) をご覧ください。これらの設定は、コンテナごとに基づいて上書き可能です。

フラグの値 説明
--dns DNS サーバの IP アドレス。複数の DNS サーバを指定するには、 --dns フラグを複数回使用する。もしもコンテナが指定した IP アドレスのいずれにも到達できなければ、Google の DNS サーバ 8.8.8.8 が追加され、インターネットのドメインの名前解決が可能になる。
--dns-search ドメイン名が省略されているホスト名を検索するための、 DNS 検索ドメイン名を指定。複数の DNS 検索プレフィックスを指定するには、複数の --dns-search フラグを使う。
--dns-opt キーバリューのペアは、 DNS オプションとその値。有効なオプションは、各オペレーティングシステムの resolv.conf に関するドキュメントを参照。
--hostname コンテナが自身で使うホスト名。指定しなければ、デフォルトはコンテナ ID 。

プロキシ サーバ

コンテナでプロキシサーバを使う必要がある場合は、 プロキシサーバの使用 をご覧ください。