当前位置: 首页 > 知识库问答 >
问题:

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

孙泉
2023-03-14

我安装docker到我的ubuntu 14.04笔记本电脑。我从中央注册表中提取docker注册表映像。为了将容器的IP地址固定为静态值,我首先更改了我的/etc/默认值/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访问容器外壳。安装NetTools包后,我检查了它的IP地址,看到它是172.17。如预期的0.20。我试着从我的主人那里ping它,它正在回复。

问题是,当我用docker检查myreg检查这个容器的配置时,输出的NetworkSet部分如下所示

"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个答案

李建中
2023-03-14

你在运行什么版本的Docker?Docker 1.0不再使用LXC,他们已经用自己的lib容器替换了它。LXC命令不适合我在下面这个博客http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/#_set_up

如果您降级到0.7并遵循lxc过程,它将工作。

 类似资料:
  • 我现在尝试在启动Docker容器时分配静态IP172.17.0.1。 我使用端口2122作为该容器的ssh端口,以便让该容器侦听端口2122。 这个命令将运行一个带有随机IP的Docker容器,如172.17.0.5,但我需要为容器分配一个特定的IP。 下面的shell脚本是我在高级网络设置中引用Docker文档的部分。 此shell脚本将分配一个静态IP 172.17.0.1并链接到world

  • 问题内容: 我正在尝试为容器提供静态IP地址。我了解我必须创建一个自定义网络。我创建了它,并且桥接接口在主机(Ubuntu 16.x)上已启动。容器从该子网获取IP,但不是我提供的静态IP。 这是我的docker-compose.yml: 容器得到10.5.0.2和10.5.0.3,而不是5和6。 问题答案: 请注意,除非您做的事情允许容器网络从外部路由到内部(例如,macvlan),否则我不建议

  • 问题内容: 每当我运行docker容器时,我都会看到它使用随机MAC地址: 如何为容器运行设置特定的MAC地址? 我可以使用相同的MAC地址同时运行多个容器吗?这些容器不需要访问外部网络,也不需要互相交谈。 问题答案: 使用LXC配置选项设置MAC地址。这是一个如何使用Docker 0.6.1设置MAC地址的示例: 在输出中,您将看到已设置的HWaddr: 更新: 先前的开关(带1个破折号)已被弃

  • 问题内容: 有什么方法可以将分配给容器。因此,容器具有公共IP。客户端可以使用IP访问容器。 问题答案: 对于当前发布的Docker版本,这是不可能的(无需在Docker背后进行大量手动工作),尽管它几乎没有必要。 Docker通过使用端口映射在容器中公开网络服务,并且端口映射可以绑定到主机上的特定IP地址。所以,如果你想有一个在Web服务器,并在另一个网站服务器,首先确保该地址可在主机上: 然后

  • 我正在尝试向容器提供静态IP地址。我知道我必须创建一个自定义网络。我创建它并且桥接接口在主机(Ubuntu 16. x)上。容器从此子网获取IP,但不是我提供的静态。 这是我的docker-compose.yml: 容器10.5.0.2和10.5.0.3,而不是5和6。

  • 我在一个单独的Docker中运行spark-master和spark-worker。 我能看见他们在跑 PS-EF grep火花根3477 3441 0 1 05?00:04:17/usr/lib/jvm/java-1.8-openjdk/jre/bin/java-cp/usr/local/spark/conf/:/usr/local/spark/jars/*-xmx1g org.apache.s