私はこれをubuntu 14.04で実行しており、docker0
は、静的IPに送信され、パブリックIPからファイアウォールを経由してルーティングされます。 Dockerコンテナで実行するようにバックエンドAPIを設定しようとしていますが、いくつかの点で混乱しています。
1.)どのようにマップしますかdocker0
のIPからコンテナのIPへdocker0
は、着信パケットをコンテナに送信することを知っています(可能であれば動的に)。
2.)まだそのような方法で行われていない場合、そのdockerコンテナを新たに実行するたびにこれを設定する必要がないようにするにはどうすればよいですか?
前もって感謝します!
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/
最近、同じ問題があり、Network Containersを使用して解決しました:
この時点から、ネットワークコンテナーはネットワーク上で利用可能になり、ポートをサービスコンテナーにルーティングします。主な利点は、「サービス」コンテナがパブリックIP、DHCPなどについて知る必要がないことです。この方法で、実行中のすべてのコンテナをネットワーク上でパブリックにすることができます。
便宜上、このすべてを一度に実行するスクリプトを作成しました。実行中のコンテナをパブリックIPで使用可能にすることは、次のように簡単です:
create-network-container.sh webserver ens32
この場合、「webserver」と呼ばれる実行中のコンテナと、ホスト「ens32」上のネットワークインターフェースが必要になります。ネットワークコンテナへのブリッジを作成するには、インターフェイスが必要です。
スクリプト、より詳細な情報と例は、次のサイトで入手できます。 https://github.com/jeroenpeeters/docker-network-containers