问题:
以下是我的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,可能是因为compose没有完全执行。 (2)由于某种原因,veth0491201无法附加到docker0桥上,因此我无法从容器内部访问互联网,因为它未通过docker0连接。
调查:
执行compose后输入docker ps -a
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
885b0429b3a4 6dd78ac216f2 "/bin/sh -c '/opt/log" 18 minutes ago Created focused_almeida
在使用Compose后运行
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
故障排除提示:
docker --version
:Docker版本1.10.2,构建c3959b1docker-compose --version
:docker-compose版本1.8.0,构建f3628c7
Docker中存在某些网络错误吗?- 我执行此操作的计算机最近进行了一些有关其网络、防火墙等方面的配置更改。
我认为它正在为其他事情使用172.18.0.0
,因此当Docker尝试使用该路由时,它被阻止了。我如何进行故障排除或确定问题是否与机器的网络设置有关? - 关于(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
docker0
桥接口被设置为默认网络接口,而不是eth0
。 - Petrus K.