我有两个“用户”网络:LAN192.168.10.0/24
和 Wireguard 192.168.20.0/24
。我还托管了192.168.10.2
一个 Docker 引擎,它为十几个容器和一些网络提供支持,这些容器和网络都整齐地落在 上172.XX.0.0/16
。一切都运行良好。
我添加了一组新容器来托管 Graylog 服务。我使用了docker-compose.yml
repo 提供的,并做了一些小改动:连接到 dockersrv
网络,允许 Web 容器连接到caddy
反向代理。完整内容docker-compose.yaml
如下:
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: mongo:4.2
volumes:
- mongo_data:/data/db
networks:
- default
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
volumes:
- es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
networks:
- default
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.3
volumes:
- graylog_data:/usr/share/graylog/data
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=XXX
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=XXXXX
- GRAYLOG_HTTP_EXTERNAL_URI=https://graylog.XXXX/
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
links:
- mongodb:mongo
- elasticsearch
restart: always
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
#- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
networks:
- default
- srv
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_data:
driver: local
networks:
default:
srv:
external: true
name: srv
由于某种原因,自动创建的 docker 网络处于打开状态192.168.16.0/20
,我花了很长时间才明白为什么 Wireguard 不再工作:这个网络包含192.168.20.0/24
并且 wireguard 流量被路由到那里……
关闭 Graylog 并手动删除192.168.16.0/20
所有内容后恢复正常。
我的问题是:为什么 docker 组合会选择一个与其他容器使用的网络截然不同的网络?如果没有任何内容docker-compose.yml
可以提示要使用的网络,那么这个选择是如何驱动的?
答案1
手动删除 docker 网络后(根据问题后半部分的信息)我重新启动了Graylog containers and, behold, the created network follows the
172.XX.0.0/16` 模板。
我大胆猜测,可能是强制启用了一个网络192.168...
,然后 Graylog 决定遵循这个新模板,并删除了以前的网络。