2016-10-23 8 views
0

私はhetzner.deに約16の公開IPv4アドレスを持つサーバーを持っています。このようなDockerは、コンテナの実行時に自動的にIPアドレスをホストに追加できますか?

今私が実行しているコンテナ:これは、最初にこのエラーを生成します

sudo docker run -d --name test6 -it -p 5.1.2.3:80:80 sunebeck/apache-php 

:手動でホストのIPアドレスを追加することによって固定されている

Error starting userland proxy: listen tcp 5.1.2.3:80: bind: cannot assign requested address. 

ip addr add 5.1.2.3 dev eth0 

その後、意図したとおりに動作し、サービスは5.1.2.3のポート80として公開されます。しかし、これを手動で管理するのは面倒です。

Dockerは必要に応じて自動的にホストからIPアドレスを追加/削除できますか?

答えて

1

ドッカー自体はそれを行うことができません。いくつかの例外(コンテナの起動時にDockerが作成するiptablesルールなど)を除いて、コンテナはホストのネットワーク環境を変更できません。

この問題を解決する最も簡単な方法は、ホストの起動時に、Fedora/CentOS/RHELの場合は/etc/sysconfig/network-scripts/ifcfg-<interface>、Debian/Ubuntuの場合は/etc/network/interfacesなど、すべてのアドレスをインターフェイスに割り当てるだけです。

このようにして、Dockerが動作する前にインターフェイス上でアドレスを使用できるようになり、ポートバインディングは問題なく動作します。

+0

私はそれを考えましたが、ある時点で別のホストがそれを使用している可能性がある場合は、物理サーバーにIPアドレスを要求したくありません。 – sune

+0

しかし、私はもちろんラッパースクリプトを作成することでそれを解決することができます。または、既存のサービスの一部を使用して、より大きなインストールを「オーケストレーション」することができます。 – sune

+0

右私は、Kubernetesのようなオーケストレーションレイヤを使用すると、これをよりうまく管理するのに役立つかもしれないことを示唆しました。私は一度、あなたが望むものを正確に実行したツール([kiwi](https://github.com/larsks/kiwi))を書いたことがありますが、決してひどく堅牢ではなく、現代版のKubernetesでは動作しませんでした。 – larsks

関連する問題