【发布时间】:2020-04-28 11:23:04
【问题描述】:
我很难弄清楚如何让 DNS 为容器到容器的通信工作。我有 dnsmasq 和 Traefik 以及许多其他服务。下面的 docker-compose.yml 是一个精简版,用于说明我的设置。
基本上我想我想将寻找 *.domain.test 的容器和外部流量引导到 Traefik 容器。我一直在寻找一种优雅的方式来做到这一点。非常感谢任何帮助。
将堆栈调高后,我运行:
docker run --rm --network=traefik praqma/network-multitool dig domain.test
然后得到:
; <<>> DiG 9.14.8 <<>> domain.test
;; global options: +cmd
:: connection timed out; no servers could be reached
docker-compose.yml
version: "3.7"
networks:
dns: {}
traefik:
name: traefik
volumes:
heimdall-data:
services:
dnsmasq:
cap_add:
- NET_ADMIN
command:
- --cache-size=1000
- --local-ttl=10
- --address=/.domain.test/192.168.1.10
- --address=/#/0.0.0.0
container_name: dnsmasq
image: andyshinn/dnsmasq:2.78
labels:
traefik.enable: "False"
networks:
dns: null
ports:
- "53:53/tcp"
- "53:53/udp"
restart: unless-stopped
traefik:
command:
- --api.insecure=true
- --providers.docker=true
- --providers.docker.exposedbydefault=true
- --entrypoints.web.address=:80
- --log.level=ERROR
container_name: traefik
image: traefik:2.1
labels:
traefik.enable: "true"
traefik.http.routers.api.entrypoints: web
traefik.http.routers.api.rule: Host(`traefik.domain.test`)
traefik.http.routers.api.service: api@internal
networks:
traefik: null
ports:
- 80:80
- 443:443
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
heimdall:
container_name: heimdall
image: linuxserver/heimdall:2.2.2-ls66
labels:
traefik.docker.network: traefik
traefik.http.routers.heimdall.entrypoints: web
traefik.http.routers.heimdall.rule: Host(`www.domain.test`, `domain.test`)
networks:
traefik: null
restart: unless-stopped
volumes:
- heimdall-data:/config:rw
【问题讨论】:
-
当您运行
dig domain.test而不指定 DNS 服务器时,dig 将默认为容器的默认值。当你运行docker run --rm --network=traefik praqma/network-multitool dig domain.test @<dnsmasq ip>时会发生什么? -
我收到同样的“无法访问服务器”消息。
标签: docker docker-compose dns traefik dnsmasq