首页 > 开发 > 云计算 > 正文

Docker for Mac 创建的dnsmasq容器连不上/不工作的问题

2017-09-12 09:51:48  来源: 网友分享

在使用docker for mac构建了一个dnsmasq的Container, 但是发现53端口似乎无法连接, 使用dig各种超时

这是dockerfile

FROM centos:6.8RUN yum update -y && yum install -y dnsmasqRUN echo "listen-address=0.0.0.0" > /etc/dnsmasq.confRUN echo "conf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.confRUN echo "user=root" >> /etc/dnsmasq.confRUN echo "server=/a/127.0.0.1" >> /etc/dnsmasq.conf#a供测试用#RUN echo 'resolv-file=/etc/resolv.dnsmasq.conf' >> /etc/dnsmasq.conf#RUN echo "nameserver 127.0.0.11" > /etc/resolv.dnsmasq.conf#上一行出现了127.0.0.11并不是写错, 而是发现docker for mac的container的/etc/resolv.conf里面确实出现了127.0.0.11, 并且这个上面是可以解析域名的, 所以才试图这么尝试过这个配置RUN yum install nc -yRUN yum clean allEXPOSE 53EXPOSE 53/udp#CMD ["nc", "-l",  "53"] #tcp调试#CMD ["nc", "-l", "-u",  "53"] #udp调试CMD ["/usr/sbin/dnsmasq", "-d"]

这是docker-compose

version: '2'services:    dns:        build: ../../images/dnsmasq        container_name: dns        restart: always        #env_file: ./config/.env#        volumes:#            - /etc/hosts:/etc/hosts#        dns:#            - 127.0.0.1        ports:            - "53:53"            - "53:53/udp"

各种端口映射应该是没有问题的, 宿主机上运行和访问:

容器内运行和访问:

解决方案

经过 @有明 的提点, 这个的根本问题在于dnsmasq的配置有问题而不是docker的问题, 有以下几点:

  1. 错误的把 server=/a/127.0.0.1 当成了 address=/a/127.0.0.1

  2. dnsmasq 的 listen-address=0.0.0.0 似乎是有bug的, 必须listen到精确的网卡的IP地址或者干脆不要这行listen-address

改掉之后就可以正常工作了