web-dev-qa-db-ja.com

Dockerコンテナにルーティング可能なIPアドレスを与える

私はこれをubuntu 14.04で実行しており、docker0は、静的IPに送信され、パブリックIPからファイアウォールを経由してルーティングされます。 Dockerコンテナで実行するようにバックエンドAPIを設定しようとしていますが、いくつかの点で混乱しています。

1.)どのようにマップしますかdocker0のIPからコンテナのIPへdocker0は、着信パケットをコンテナに送信することを知っています(可能であれば動的に)。

2.)まだそのような方法で行われていない場合、そのdockerコンテナを新たに実行するたびにこれを設定する必要がないようにするにはどうすればよいですか?

前もって感謝します!

25
robert

Dockerの外部のdockerコンテナーにIPを割り当てたいと思います。

最初に、新しいIPを作成し、ホストのインターフェイスに割り当てます(インターフェイスの名前はeth0と仮定します)。

$> ip addr add 10.0.0.99/8 dev eth0

ここで、コンテナを起動するときに、そのアドレスを指定して、それをドッカーコンテナにリンクします。

$> docker run -i -t --rm -p 10.0.0.99:80:8080 base

-p引数を指定すると、dockerはiptables NATルールを作成します。このルールは、宛先10.0.0.99:80に一致するすべてのトラフィックをポート8080のdockerコンテナに変換します。

プロセスを自動化してスケールアウトする必要がある場合は、次のリソースを参照してください。 https://github.com/jpetazzo/pipework

Dockerのドキュメントは良いスタートです: https://docker.github.io/engine/userguide/networking/

39
nucatus

最近、同じ問題があり、Network Containersを使用して解決しました:

  • パブリックIPで利用可能にしたい「サービス」コンテナを開始します
  • サービスコンテナにリンクされ、サービスコンテナによって公開されるポートへのルーティングを行う新しい「ネットワーク」コンテナを作成します。このコンテナには、ホストとブリッジされる追加のネットワークインターフェイスがあり、DHCPからIPを取得できます。
  • JpetazzoのPipeworkを使用して、Dockerホストからコンテナーへのネットワークブリッジを作成します( https://github.com/jpetazzo/pipework
  • ネットワークコンテナは、DHCPからアドレスを取得します。

この時点から、ネットワークコンテナーはネットワーク上で利用可能になり、ポートをサービスコンテナーにルーティングします。主な利点は、「サービス」コンテナがパブリックIP、DHCPなどについて知る必要がないことです。この方法で、実行中のすべてのコンテナをネットワーク上でパブリックにすることができます。

便宜上、このすべてを一度に実行するスクリプトを作成しました。実行中のコンテナをパブリックIPで使用可能にすることは、次のように簡単です:

create-network-container.sh webserver ens32

この場合、「webserver」と呼ばれる実行中のコンテナと、ホスト「ens32」上のネットワークインターフェースが必要になります。ネットワークコンテナへのブリッジを作成するには、インターフェイスが必要です。

スクリプト、より詳細な情報と例は、次のサイトで入手できます。 https://github.com/jeroenpeeters/docker-network-containers

9
Jeroen Peeters