我正在观看有关配置 Nginx 和本地 DNS 设置的 YouTube 教程。当我在 Ubuntu 22.04 主机上进行操作时,我遇到了按照教程说明使用 Docker 设置的 DNS 服务器的问题。当我尝试解析输入的域名时,Docker DNS 服务器无法解析它。
nslookup ns.main.com
;; Got SERVFAIL reply from 127.0.0.1, trying next server
Server: 192.168.1.1
Address: 192.168.1.1#53
** server can't find ns.main.com: NXDOMAIN
我遇到的第一个问题是能够使用 docker-compose 成功构建 Docker 容器,但在尝试使用 docker-compose up 启动它们时出现错误。该错误表明端口 53 已被我的 Ubuntu 主机上的 systemd-resolved 使用。我能够解决此冲突并按照中概述的步骤运行容器Ubuntu:如何释放由 systemd-resolved 使用的端口 53这有助于从 systemd-resolved 中释放端口 53。
/etc/resolv.conf
nameserver 127.0.0.1
nameserver 192.168.1.1
nameserver fe80::1%3
search .
须藤 lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 4079 juan 372u IPv6 116841 0t0 UDP *:domain
我正在网上寻找 DNS 解析问题的解决方案,但我仍然不确定正确的方法。一些信息表明 IPv6 可能会导致问题,我应该避免使用它,但我不知道这是否是正确的举动。我不确定 DNS 问题的根本原因是什么 - 是否是 IPv6 兼容性问题、配置错误或其他问题。
docker-compose.yml
services:
nginx:
build:
context: ./nginx/
ports:
- 80:80
volumes:
- ./nginx/html/:/usr/share/nginx/html/
- ./nginx/conf.d/:/etc/nginx/conf.d/
dns:
build:
context: ./dns/
restart: always
ports:
- 53:53
- 53:53/udp
volumes:
- ./dns/named.conf:/etc/bind/named.conf
- ./dns/zone/:/etc/bind/zone/
command: named -c /etc/bind/named.conf -g -u named
dns/Dockerfile
FROM alpine:latest
RUN apk add bind openrc
RUN rc-update -u named
dns/named.conf
options {
directory "var/bind";
allow-transfer { "none"; };
allow-query { any; };
listen-on { any; };
};
zone "main.com" IN {
type master;
file "/etc/bind/zone/main.com";
};
dns/zone/main.com
$ttl 86400
@ IN SOA ns.main.com. hostmaster.main.com.(
202 ; Serial
600 ; Refresh
3600 ; Retry
12378237) ; Expire
@ IN NS ns.main.com.
ns IN A 127.0.0.1
nginx/conf.d/default.conf
server {
listen 80;
server_name ns.main.com;
location / {
root /usr/share/nginx/html/main;
index index.html;
}
}
nginx/Dockerfile
FROM nginx:latest
COPY ./html /usr/share/nginx/html
RUN apt-get update && apt-get install -y procps