Pro*_*ter 14 dhcp bridge docker
我有很多 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]
Run Code Online (Sandbox Code Playgroud)
主机在/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
Run Code Online (Sandbox Code Playgroud)
自从我发现了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
Run Code Online (Sandbox Code Playgroud)
以及通往:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Run Code Online (Sandbox Code Playgroud)
这导致容器启动,但没有 IP。然后我从一个在线帖子中获得了建议,该帖子设法通过 Fedora 完成,通过致电dhclient
. 不幸的是,这在基于 ubuntu 的容器中对我不起作用。
以下是我在不同条件下收到的以下错误消息:
dhclient
当我启用--privileged
启动容器时运行:
dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)正在运行sudo dhclient
或dhclient
(未指定接口)。
立即返回,仍然没有 IP 或网络连接。
如何让 docker 容器从与其主机相同的子网中获取动态 IP,以便我可以在多个主机上部署容器而无需跟踪 IP?
额外信息
DOCKER_OPTS="-e lxc"
进来/etc/default/docker
from ubuntu:14.04
Dockerfile 构建的。看来这是一个悬而未决的问题,并且这是特定于 Ubuntu 容器和 apparmor 的问题。
bprodoehl 在那里发布了一个解决方法:
--privileged
RUN mv /sbin/dhclient /usr/sbin/dhclient
dhclient eth0
,您仍然会看到错误消息:mv: cannot move '/etc/resolv.conf.dhclient-new.29' to '/etc/resolv.conf': Device or resource busy
,但您现在将拥有 IP 并且可以使用网络。