docker-compose无法添加veth(虚拟接口)来桥接docker0

时间:2016-10-19 09:31:15

标签: 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:添加接口veth0491201以桥接docker0失败:操作不受支持

所以似乎(1)docker-compose正在为logstash服务而不是elkstack_logstash_1分配一个随机生成的名称,大概是因为这个组合没有完全通过。
(2)veth0491201由于某种原因无法附加到网桥docker0,因此我无法通过容器内的互联网访问互联网,因为它未通过{连接{ {1}}。

研究
撰写后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

排查潜在客户

  1. 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 :Docker版本1.10.2,构建c3959b1
    docker --version:docker-compose版本1.8.0,build f3628c7
    Docker中的一些网络错误?
  2. 我这样做的机器最近在网络,防火墙等方面做了一些配置更改。
    我认为它使用docker-compose --version用于其他内容,因此当Docker尝试使用该路由时,它会被阻止。 如何排除故障或确定机器网络设置是否存在问题?
  3. 按照(2)中提出的观点,我尝试制作一个码头组合,其中明确定义了网络,这似乎不起作用:
  4. 172.18.0.0
    • 我能够在机器上构建另一堆服务,这让我相信它与Docker相关或者与docker相关的缺陷,无论是在应用程序本身还是在我的应用程序中配置。
    • 我能够在本地计算机上使用它,这让我相信这是我遇到问题的远程计算机的问题。

      uname -a:networks: net: driver: bridge ipam: driver: default config: - subnet: 172.30.0.0/16 ip_range: 172.30.5.0/24
      cat / etc / centos-release: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

    相关信息&的问题:
      - 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

2 个答案:

答案 0 :(得分:1)

您的问题似乎与您的系统配置有关。

请问,您是否可以尝试手动添加,使用unix命令brctl进入网桥?

命令应为:

brctl addif veth0491201 docker0

这是脚本完成启动虚拟机的命令。 通过故障排除步骤可以解释原因。

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

对于sûre,您的问题与您的IP设置无关。

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

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

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

答案 1 :(得分:1)

这是机器上网络接口的问题 eth0未设置为默认值,而 docker0是默认接口导致错误。

在此处阅读更多内容:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-networkscripts-interfaces.html
为解决此问题,对/etc/sysconfig/network-scripts/中包含的文件进行了更改,这些文件指定了网络接口的配置方式。