Docker容器內部 DNS 解析失敗的問題

上段時間遇到了 docker 容器內部 dns 解析失敗的問題,發現在 docker run 啓動容器之後,容器內部訪問外部的接口總是提示無法解析 dns,然而容器外部是可以解析的,dns的配置也沒有任何問題。

用 docker exec -it contaner_name bash 進去,ping 任何域名都是不通。

最終的解決辦法在在於,停止 docker daemon,刪掉 ifconfig 查到的 docker0 這個 bridge,再重新啓動 docker daemon,問題解決:

官方的解決腳本是這樣的:

$ sudo apt-get install bridge-utils -y
$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
$ sudo service docker start
$ docker network inspect bridge

實際上我做了這一步就成功了:

$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo service docker start

當然,我還需要 docker run -d 啓用我原來的容器。

UPDATE 2017-01-22

徹底解決辦法:

1. 在 docker-compose.yml 的容器配置裏面,加入 dns 配置:

2. 參照 https://github.com/docker/docker/issues/541#issuecomment-32444639

在 “/etc/default/docker” 添加:

DOCKER_OPTS="-dns 119.29.29.29 -dns 180.76.76.76"

然後重啓

  xxx:
    image: xxx
    volumes:
     - xxx:xxx
     - xxx:xxx
    links:
     - xxxx:xxx
    depends_on:
     - xxxxxx
    dns: 
     - 119.29.29.29
     - 180.76.76.76
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章