linux - docker-compose 无法将 veth(虚拟接口(interface))添加到网桥 docker0

标签 linux networking docker docker-compose

问题:
这是我的 docker-compose.yaml :

version: '2'

services:
    elasticsearch:
        image: 'elasticsearch:latest'
        ports:
            - "9200:9200"

    logstash:
        build: './logstash_image'
        links:
            - elasticsearch
        ports:
            - "5000:5000"
            - "5001:5001"
            - "5201:5201"
            - "5202:5202"
            - "5203:5203"

    kibana:
        image: 'kibana:latest'
        ports:
             - '5601:5601'
        links:
             - elasticsearch
        volumes:
             - ./kibana.yml:/opt/kibana/config/kibana.yml

这是我的 Dockerfile :

FROM logstash:latest

LABEL maintainer1.name="anon" \
      maintainer1.email="anon@mail.com" \
      maintainer2.name="myname" \
      maintainer2.email="myname@somemail.com"

RUN /opt/logstash/bin/logstash-plugin install logstash-input-log4j2-logstash2 logstash-output-syslog
# FIX: use `logstash-input-log4j2` instead of `logstash-input-log4j2-logstash2`?
# other plugins: logstash-input-http, logstash-input-log4j
COPY logstash.conf /etc/logstash/conf.d/logstash.conf

ENTRYPOINT ["logstash","-f","/etc/logstash/conf.d/logstash.conf", "--debug"]

这几天前构建得很好,但是目前我收到以下错误消息:

[root@somemachine elk_stack]# docker-compose up -d
Creating network "elkstack_default" with the default driver
Building logstash
Step 1 : FROM logstash:latest
 ---> 1ca34df702f8
Step 2 : LABEL maintainer1.name ...
 ---> Using cache
 ---> 6dd78ac216f2
Step 3 : RUN /opt/logstash/bin/logstash-plugin install logstash-input-log4j2-logstash2 logstash-output-syslog
 ---> Running in 885b0429b3a4
ERROR: Service 'logstash' failed to build: failed to create endpoint focused_almeida on network bridge: adding interface veth0491201 to bridge docker0 failed: operation not supported

错误:服务“logstash”构建失败:无法在网桥上创建端点 focused_almeida:将接口(interface) veth0491201 添加到网桥 docker0 失败:不支持操作

所以看起来 (1) docker-compose 正在为 logstash 服务分配一个随机生成的名称而不是 elkstack_logstash_1大概是因为撰写没有完全通过。
(2) veth0491201无法连接到桥 docker0出于某种原因,因此我无法从容器内访问互联网,因为它没有通过 docker0 连接。 .

调查:
docker ps -a撰写后:

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                        NAMES
885b0429b3a4        6dd78ac216f2                "/bin/sh -c '/opt/log"   18 minutes ago      Created                                                          focused_almeida

docker network ls撰写后:

NETWORK ID          NAME                          DRIVER            
23bcc8c01ad4        bridge                        bridge              
4aea66903c6b        none                          null                
67cb26c508d9        host                          host                
9fc4a42bbcf6        elkstack_default              bridge  

docker network inspect elkstack_default :

[
    {
        "Name": "elkstack_default",
        "Id": "9fc4a42bbcf6800889f8e9bc71ab394ebf6f97b21e0ce2345253b055d17138aa",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1/16"
                }
            ]
        },
        "Containers": {},
        "Options": {}
    }
]

route -n :

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.120.1      0.0.0.0         UG    100    0        0 docker0
10.0.120.0      0.0.0.0         255.255.255.0   U     100    0        0 docker0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-83e64c848669
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-9fc4a42bbcf6

故障排除线索:

  1. docker --version : Docker 版本 1.10.2,构建 c3959b1
    docker-compose --version : docker-compose 版本 1.8.0, build f3628c7
    Docker 中存在一些网络错误?
  2. 我正在执行此操作的机器最近对其网络、防火墙等进行了一些配置更改。
    我认为它正在使用 172.18.0.0用于其他目的,因此当 Docker 尝试使用该路由时,它会被阻止。 我该如何排除故障或确定这是否是机器网络设置的问题?
  3. 按照 (2) 中的观点,我尝试制作一个明确定义网络的 docker-compose,这似乎也不起作用:
networks:
    net:
        driver: bridge
        ipam:
            driver: default
            config:
            - subnet: 172.30.0.0/16
              ip_range: 172.30.5.0/24
  • 我能够在机器上 docker-compose 另一个服务堆栈,这让我相信这是一个与 Docker 相关或与 docker-compose 相关的缺陷,无论是在应用程序本身还是在我的配置中。
  • 我能够让它在我的本地机器上运行,这让我相信这是我遇到问题的远程机器的问题。

    uname -a: Linux somemachine 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    cat/etc/centos-release: CentOS Linux release 7.2.1511 (Core)

相关信息和问题:
- http://54.71.194.30:4017/articles/networking/#how-docker-networks-a-container
- https://github.com/docker/docker/issues/23047
- https://github.com/docker/docker/issues/15341

最佳答案

您的问题看起来与您的系统配置有关。

拜托,你可以尝试手动添加,使用 unix 命令 brctl 将 veth 添加到网桥中吗?

命令应该是:

brctl addif veth0491201 docker0

这是脚本执行的命令,用于启动失败的 VM。 通过故障排除,该步骤可能会解释原因。

我怀疑 veth 的类型在您的系统上不兼容,您必须知道原因。可能是您系统中有关桥接软件部分的错误。

当然,您的问题与您的 ip 设置无关。

您可以尝试通过测试不同的内核版本来升级或降级您的内核。

没有关于命令期间究竟发生了什么的更多细节 “brctl addif veth0491201 docker0”我不能说更多了。

这将返回相同的“不支持操作”错误消息,但是通过检查两个接口(interface)的所有内容,您可能会发现“不支持操作”(错误类型接口(interface))的一个很好的理由或内核错误(良好的界面类型)。

关于linux - docker-compose 无法将 veth(虚拟接口(interface))添加到网桥 docker0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127462/

相关文章:

linux - 从 Linux 命令行复制到 Vim

c - sh: 系统调用内存不足

networking - QuickFix/n 出现 Stunnel "Peer suddenly disconnected"错误

php - Socket和Transport有什么区别,如果有的话

java - 如何从方法级别范围检索值?

docker - docker_compose.yml 中的 links 和 depends_on 的区别

python - Linux 桌面文件 Exec 不使用用户 session

Linux - 将部分链接到最低 2 MB 内存时进程终止?

docker - Docker处理不完的进程?

docker - 如何在拥有私有(private) docker 注册表服务器的同时将 docker 与 gradle 一起使用