[英]Pass current local ip to dnsmasq command in docker-compose
[英]Setting Up Docker Dnsmasq
我正在嘗試設置一個docker dnsmasq容器,以便我可以讓所有的docker容器查找域名,而不是使用硬編碼的IP(如果它們位於同一主機上)。 這解決了一個問題,即無法改變docker容器中的/ etc / hosts文件 ,這使我可以通過更改dnsmasq容器引用的單個文件輕松地一次性更新所有容器。
看起來有人已經為我完成了艱苦的工作並創建了一個dnsmasq容器 。 不幸的是,它對我來說並不“有效”。 我寫了一個bash腳本來啟動容器,如下所示:
name="dnsmasq_"
timenow=$(date +%s)
name="$name$timenow"
sudo docker run \
-v="$(pwd)/dnsmasq.hosts:/dnsmasq.hosts" \
--name=$name \
-p='127.0.0.1:53:5353/udp' \
-d sroegner/dnsmasq
在運行之前,我創建了dnsmasq.hosts目錄並在其中插入了一個名為hosts.txt的文件,其中包含以下內容:
192.168.1.3 database.mydomain.com
不幸的是,每當我嘗試從內部ping該域時:
我總是收到ping: unknown host
錯誤消息。
我嘗試啟動沒有守護進程模式的dnsmasq容器,所以我可以調試它的輸出,如下所示:
dnsmasq: started, version 2.59 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n DHCP TFTP conntrack IDN
dnsmasq: reading /etc/resolv.dnsmasq.conf
dnsmasq: using nameserver 8.8.8.8#53
dnsmasq: read /etc/hosts - 7 addresses
dnsmasq: read /dnsmasq.hosts//hosts.txt - 1 addresses
我猜我在啟動容器時沒有正確指定-p
參數。 有人可以告訴我其他docker容器應該查找DNS,或者我試圖做的事實際上是不可能的嗎?
需要更改docker dnsmasq服務的構建腳本,以便綁定到服務器的公共IP ,在本例中是eth0接口上的192.168.1.12
#!/bin/bash
NIC="eth0"
name="dnsmasq_"
timenow=$(date +%s)
name="$name$timenow"
MY_IP=$(ifconfig $NIC | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}')
sudo docker run \
-v="$(pwd)/dnsmasq.hosts:/dnsmasq.hosts" \
--name=$name \
-p=$MY_IP:53:5353/udp \
-d sroegner/dnsmasq
在主機(在本例中為ubuntu 12)上,您需要更新resolv.conf或/ etc / network / interfaces文件,以便將公共IP(eth0或eth1設備)注冊為名稱服務器。
您可能希望在容器未運行時將輔助名稱服務器設置為google,方法是將行更改為dns-nameservers xxx.xxx.xxx.xxx 8.8.8.8
例如,沒有逗號或其他行。
然后,如果更新了/ etc / network / interfaces文件,則需要重新啟動網絡服務sudo /etc/init.d/networking restart
,以便自動更新/etc/resolve.conf文件,docker將在此期間復制到容器構建。
現在重新啟動所有容器
sudo docker stop $CONTAINER_ID
sudo docker start $CONTAINER_ID
這會導致其/etc/resolv.conf文件更新,因此它們指向新的名稱服務器設置。
所有docker容器(自進行更改后構建的)中的DNS查找現在應該可以使用您的dnsmasq容器了!
作為旁注,這意味着其他主機上的 docker容器也可以利用此主機上的dnsmasq服務,只要它們的主機名稱服務器設置設置為使用此服務器的公共IP即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.