我有很多Docker容器,它们需要在与它们的主机相同的LAN上寻址。到目前为止,我已经通过建立网桥并手动为其分配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构建的。