ホストと同じLAN上でアドレス指定が必要なdockerコンテナーがたくさんあります。これまで、ブリッジを設定して手動でIPを割り当て、自分でIPを管理することで、これを達成してきました。スタートアップの例は次のようになります。
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/etc/network/interfaces
(ubuntu)で定義されたブリッジを持つホストの場合:
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
serfを発見して以来、DHCPがIPを追跡してコンテナーに渡すことができるように、コンテナー内で自動検出の使用に移行しようとしています。それ以来、起動コマンドを次のように変更しました。
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash
とへの橋:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
これにより、コンテナが起動しましたが、IPがありませんでした。次に、を呼び出して、Fedoraでそれを成し遂げたオンライン投稿からアドバイスを受けましたdhclient
。残念ながら、これはubuntuベースのコンテナ内では機能しません。
以下は、さまざまな条件下で表示される次のエラーメッセージです。
コンテナの起動
dhclient
を有効に--privileged
したときに実行する:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
sudo dhclient eth0
いないときの実行--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
実行中
sudo dhclient
またはdhclient
(インターフェイスが指定されていない)。すぐに戻り、IPまたはネットワーク接続はまだありません。
Dockerコンテナーを取得して、ホストと同じサブネットから動的IPを取得し、IPを追跡せずに複数のホストにコンテナーを展開できるようにするにはどうすればよいですか?
追加情報
- 実行
DOCKER_OPTS="-e lxc"
中/etc/default/docker
- ホストはUbuntu 14.04です
- Dockerコンテナは
from ubuntu:14.04
、Dockerfile を使用して構築されます。