---
# System prepended metadata

title: Docker的網路-CoreDNS

---

Docker的網路-CoreDNS

上一篇有說明可以在container run時指定dns server，如果要自建hostname-ip的dns服務而啟動bind，就增加很多傳統管理議題，因為bind對container架構還是多了，所以我們要找cloud-native的方案

想找到相關的方案，可以從CNCF的landscape

https://landscape.cncf.io/

![](https://hackmd.io/_uploads/HJJfHVb1p.png)

我們找到畢業的專案 CoreDNS，代表應該是比較成熟的方案

https://coredns.io/manual/toc/

官方的手冊相當簡單，沒有針對docker啟動的方式有多少說明，所以我們先猜測entrypoint可能停留在coredns 這個binary指令

其實經由docker hub檢視layer的說明，也可以看出來

https://hub.docker.com/layers/coredns/coredns/latest/images/sha256-2169b3b96af988cf69d7dd69efbcc59433eb027320eb185c6110e0850b997870?context=explore

![](https://hackmd.io/_uploads/rkI98EZyp.png)


> docker run -it --rm coredns/coredns 

![](https://hackmd.io/_uploads/r1X0BEb1p.png)

答對了，不過我們對coredns還是不熟，所以下一下指令看有什麼參數可以使用

> docker run -it --rm coredns/coredns --help

![](https://hackmd.io/_uploads/HyePL4Z1p.png)


但出現一個問題：要怎麼讓容器抓到我們放在host的coredns.conf???

經由dockerhub看到的layer資訊跟github，也許可以經由容器裡頭的/home/nonroot，將HOST pwd的路徑取得coredns.conf

> docker inspect coredns/coredns


![](https://hackmd.io/_uploads/rJXScIWJ6.png)

我們來設定一下coredns.conf

```
.:1054 {
    bind lo
    whoami
}

.:1054 {
    bind eth0
    whoami
} 

```

這是官方的範例，我們來啟動來測試：

> docker run -it --rm -v $(pwd):/home/nonroot  coredns/coredns  -dns.port=1054 -conf=coredns.conf


![](https://hackmd.io/_uploads/H1xVj8ZkT.png)

看起來啟動成功了，後面我們來深入了解coredns可以作到的事情有哪些，以及容器如何使用它。

