解決docker容器設(shè)置DNS不生效的問題
docker容器設(shè)置DNS不生效問題
設(shè)定DNS的方法
先來說一下 docker run 和 docker-compose 指定 dns 的方法。
1、docker run 命令 設(shè)置 dns
docker run --dns=8.8.8.8
2、docker-compose.yml 文件中 設(shè)置dns
version: '3.9' services: coredns: image: hello:1.0.0 container_name: hello dns: 8.8.8.8
通過以上兩種方式配置 dns 后,你會發(fā)現(xiàn) docker run方式
設(shè)定的有效,docker-compose 方式
設(shè)定的 dns 無效。
主要表現(xiàn)在容器中 /etc/resolv.conf
中的地址沒有變化
,修改文件重啟后仍不生效。
不生效原因分析
容器的 /etc/hosts
、hostname
等文件 都是默認掛載宿主機里的配置的,命令行進入容器后,在容器中使用 mount
命令可以看到。
一般容器中默認的 nameserver
就是 127.0.0.11
。
解決方案
1、直接使用 volume 設(shè)置重新映射 /etc/resolv.conf
文件到宿主機的位置。既在宿主機上自定義一個文件(或者直接使用宿主機的 /etc/resolv.conf
),掛載到容器內(nèi)的 /etc/resolv.conf
。
2、在 /etc/docker/daemon.json
中配置所有 docker 容器的缺省 dns(這里配置的 dns 僅對 docker run 默認網(wǎng)絡(luò)啟動的走 docker0
網(wǎng)橋的容器有效)。
3、在 docker-compose
中配置參數(shù) network_mode: bridge
的容器。注意設(shè)置了該參數(shù)的容器不能再用 networks
配置額外的網(wǎng)絡(luò)信息。
官方說明釋義
參考官方文檔說明,意思是如果使用默認的 docker0
網(wǎng)絡(luò)的容器,dns 配置會生效
,但是使用自定義網(wǎng)絡(luò)話(docker-compose 默認就創(chuàng)建新的自定義網(wǎng)絡(luò)),就不會用宿主機的 dns文件,從而不能覆蓋 resolv.conf 配置,既不能生效。
而使用 docker run
默認使用的是橋接模式下的 docker0 網(wǎng)橋
,所以生效
。docker-compose
文件啟動會創(chuàng)建新的網(wǎng)橋
,所以不生效
。
結(jié)合上述說明,如果想讓 docker-compose.yml
中的容器配置 dns 生效,就需要為容器設(shè)置 network_mode: bridge
后再設(shè)置 dns
,這樣對應(yīng)的容器 dns 生效(設(shè)定 network_mode: bridge
的容器可以通過相關(guān)命令查看它走的是 docker0 網(wǎng)橋)。
最后,因為 docker-compose 中 network_mode: bridge
和 networks
,兩個配置只能二選一,加上在 docker-compose 中為容器設(shè)定固定IP 又需要通過 networks 來配置,所以在 docker-compose 中如果你選擇 network_mode: bridge
就之能放棄為容器設(shè)置固定 IP 的需求。
相關(guān)連接:
- https://github.com/docker/compose/issues/2847
- https://docs.docker.com/config/containers/container-networking/
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud基于Docker和Docker-Compose的項目部署過程
本文介紹了如何卸載舊版本Docker、更新系統(tǒng)、安裝Docker及其依賴,并設(shè)置國內(nèi)鏡像源以加快下載速度,詳細說明了如何安裝Docker Compose、配置鏡像加速器,并展示了如何使用Docker Compose部署SpringCloud項目,提供了更新和重啟容器的方法2024-10-10docker部署lnmp-wordpress的實現(xiàn)步驟
本文主要介紹了docker部署lnmp-wordpress的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09docker環(huán)境變量配置不生效/ect/profile的解決方法
docker在使用過程中,有時候自定義容器實例中的某些配置文件,本文主要介紹了docker環(huán)境變量配置不生效/ect/profile的解決方法,感興趣的可以了解一下2023-08-08