使用LXC驱动程序将静态IP设置为docker容器

时间:2014-07-18 15:27:45

标签: virtual-machine virtualization docker lxc

我将docker安装到我的ubuntu 14.04笔记本电脑上。我从中央注册表中删除了docker注册表图像。要将容器的IP地址修改为静态值,我首先更改了/etc/defaults/docker并将-e lxc添加到DOCKER_OPTS变量。

然后运行我的本地注册表,我使用了以下命令;

docker run \
-i -t -h myreg  \
--net="none" \
--lxc-conf="lxc.network.hwaddr=91:21:de:b0:6b:61" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 172.17.0.20/16" \
--lxc-conf="lxc.network.ipv4.gateway = 172.17.42.1"  \
--lxc-conf="lxc.network.link = docker0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
--name myreg \
-p 5000:5000 \
-d registry  \
/bin/bash

然后使用docker attach myreg访问容器的shell。安装net-tools软件包之后,我检查了它的IP地址,并按预期看到它是172.17.0.20。我试图从我的主机ping它,它正在回复。

问题在于,当我使用docker inspect myreg检查此容器的配置时,输出的NetworkSettings部分如下所示

"NetworkSettings": {
    "Bridge": "docker0",
    "Gateway": "172.17.42.1",
    "IPAddress": "172.17.0.8",
    "IPPrefixLen": 16,
    "PortMapping": null,
    "Ports": {
        "5000/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "5000"
            }
        ]
    }

它显示172.17.0.8作为它的IP地址。如果我不是usign lxc驱动程序,它应该分配的值。当我使用docker push命令将标记图像推送到此本地注册表时,这将成为一个问题。因为,docker正在使用此错误的IP来推送图像,并抛出错误日志,如下所示

de7e1cfc] +job push(127.0.0.1:5000/mongo)
2014/07/18 17:10:19 Can't forward traffic to backend tcp/172.17.0.8:5000: dial tcp  172.17.0.8:5000: no route to host
2014/07/18 17:10:22 Can't forward traffic to backend tcp/172.17.0.8:5000: dial tcp 172.17.0.8:5000: no route to host

这是什么问题?或者我在做smt。错?

1 个答案:

答案 0 :(得分:1)

你在运行什么版本的Docker? Docker 1.0不再使用LXC,他们用自己的libcontainer替换它。关注此博客时,LXC命令对我不起作用 - http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/#_set_up

如果您降级到0.7并遵循lxc流程,它将起作用。