# DockerコンテナーDNSの設定

Dockerが仮想マシン(Docker for Mac、Docker for Windows)で実行される場合、デフォルトのコンテナーDNS設定は物理マシンの設定とは異なります。その場合は、Remote Engine Gen2に含まれているDocker設定ファイル内のDNSを設定する必要があります。

## 手順

1. Remote Engine Gen2インストールディレクトリーに移動し、次のファイルを開いて編集します:

   default/docker-compose.yml - AWS米国、AWS欧州、AWSアジアパシフィック、Azureリージョンでエンジンを使用している場合

   eap/docker-compose.yml - Early Adopter Program (早期導入者プログラム)の一部としてエンジンを使用している場合
2. 設定方法:
   1. 動的DNSレゾリューションの設定: dnsセクションにネームサーバーを追加するか、dns\_searchセクションにサフィックスを追加します。サフィックスは、DNSレゾリューション用にホスト名に自動的に付加されます。dns\_searchセクションにリスト表示されているエントリーが、各コンテナーの/etc/resolv.confファイル内に表示されます。
      ## 例
      ```
      dns:
        - 8.8.8.8
        - 9.9.9.9
      dns_search:
        - dc1.example.com
        - dc2.example.com
      ```
   2. 静的DNSレゾリューションの設定: extra\_hostsセクションにエントリーを追加します。これらのエントリーは、各コンテナーの/etc/hostsファイルに自動的に追加されます。

      情報メモ注: 2つのRemote Engine Gen2コンテナー(livyとcomponent-server)は外部接続を必要とするため、両方にDNS設定が必要になる場合があります。
      ## 例
      ```
      extra_hosts:
       - "somehost:162.242.195.82"
       - "otherhost:50.31.209.229"
      ```
3. ファイルを保存します。

## タスクの結果

docker-compose.ymlは次のようになります。

```
version: '3.6'

networks: ...

volumes:...

services:
 ...
 component-server:
  image: ${COMPONENTS_IMG}
  ...
  labels:...
  dns:
  - 8.8.8.8
  - 9.9.9.9
  dns_search:
  - dc1.example.com
  - dc2.example.com  
  extra_hosts:
  - "somehost:162.242.195.82"
  - "otherhost:50.31.209.229"
...
```

このトピックの詳細は、[Dockerのドキュメンテーション](https://docs.docker.com/compose/compose-file/)を参照してください。

詳細情報:

Remote Engine Gen2のサービスは、remote-engine\_defaultというユーザー定義のブリッジネットワーク上でDockerコンテナーとして実行されます。

情報メモヒント: ユーザー定義のこのブリッジがあるかどうかは、コマンドdocker network lsを実行して確認できます。

Dockerバージョン1.10の段階では、ユーザー定義のブリッジネットワークにはDNSサーバーが組み込まれています。詳細は、[埋め込みDNSサーバー](https://docs.docker.com/v17.09/engine/userguide/networking/#embedded-dns-server)と[ユーザー定義のネットワーク](https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/)に関するDockerのドキュメンテーションを参照してください。

ランタイムで指定されるオプションによっては、Dockerコンテナー用のDNSサービスレゾリューションに影響を与えることがあります。ただし、そのようなオプションが使われていない場合、デフォルト動作としてDockerはホストマシンの/etc/resolv.confを使います。ホストマシンはDockerのデーモンが実行される場所です。物理マシン上ではDockerを実行できず、仮想マシン上で実行しなければならない場合があります。DockerコンテナーDNSをdocker-compose.ymlファイル内で手動で設定する場合があるのはそのためです。