コンテナの ネットワーク機能 ¶
コンテナが使うネットワークの種類とは、 bridge 、 overlay 、 macvlan ネットワーク 、あるいは任意のネットワーク プラグインであり、コンテナ内からは見られません( none
ネットワークを使っていないのを想定)。このトピックでは、コンテナ内の視点からネットワークについて考えます。
公開された ポート¶
デフォルトでは、 docker create
や docker run
を使ってコンテナの作成時、コンテナ内のあらゆるポートは外の世界に対して公開されません。Docker の外でサービスに対するポートを有効にするには、あるいは、コンテナのネットワークに接続していない Docker コンテナに接続するには、 --publish
か -p
フラグを使います。これにより、 Docker ホスト上にあるコンテナのポートを、外の世界に
フラグの値 |
説明 |
---|---|
|
Docker ホスト上のポート 8080 に、コンテナ内の TCP ポート 80 を割り当て |
|
Docker ホスト上のホスト IP 192.168.1.100 に対するポート 8080 に、コンテナ内の TCP ポート 80 を割り当て |
|
Docker ホスト上のポート 8080 に、コンテナ内の UDP ポート 80 を割り当て |
|
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
ネットワークでは、このファイルのコピーを取得します。一方で、
/etc/hosts
で定義されたカスタム ホストは継承されません。コンテナに追加のホストを渡したい場合は、 docker run
リファレンス ドキュメントの コンテナの hosts ファイルにエントリ追加(--add-host) をご覧ください。これらの設定は、コンテナごとに基づいて上書き可能です。
フラグの値 |
説明 |
---|---|
|
DNS サーバの IP アドレス。複数の DNS サーバを指定するには、 |
|
ドメイン名が省略されているホスト名を検索するための、 DNS 検索ドメイン名を指定。複数の DNS 検索プレフィックスを指定するには、複数の |
|
キーバリューのペアは、 DNS オプションとその値。有効なオプションは、各オペレーティングシステムの |
|
コンテナが自身で使うホスト名。指定しなければ、デフォルトはコンテナ ID 。 |
プロキシ サーバ¶
コンテナでプロキシサーバを使う必要がある場合は、 プロキシサーバの使用 をご覧ください。
参考
- Container networking
https://docs.docker.com/config/containers/container-networking/