Configuración de comando
Para ver o configurar los servidores DNS de Docker, puede utilizar los siguientes métodos:
-
Ver la configuración DNS de Docker:
- En Linux, puede ver la configuración DNS de Docker ejecutando el siguiente comando:
docker info | grep -i dns
- En Windows y macOS, la configuración de DNS se puede encontrar en la configuración de Docker Desktop.
- En Linux, puede ver la configuración DNS de Docker ejecutando el siguiente comando:
-
Configure el servidor DNS de Docker:
- En Linux, puede
daemon.json
configurar el servidor DNS editando el archivo de configuración de Docker. Este archivo generalmente se encuentra/etc/docker/
en el directorio. El archivo de configuración se puede abrir usando el siguiente comando:
Agregue o modifique el campo en el archivo de configuraciónsudo nano /etc/docker/daemon.json
dns
para especificar la dirección del servidor DNS deseada, por ejemplo:
Después de guardar el archivo de configuración, reinicie el servicio Docker.{ "dns": ["8.8.8.8", "8.8.4.4"] }
- En Windows y macOS, puede utilizar la interfaz de configuración de Docker Desktop para configurar el servidor DNS. Abra Docker Desktop, haga clic en el icono de Docker en la bandeja del sistema, seleccione "Configuración", luego seleccione la pestaña "Daemon", agregue la dirección del servidor DNS requerida en la sección "DNS", guarde los cambios y reinicie Docker.
- En Linux, puede
Configurar en Docker-Compse
daemon.json
Si necesita mantener la configuración DNS consistente en Docker Compose , puede usar daemon.json
la misma configuración del servidor DNS. El siguiente es un docker-compose.yml
archivo de ejemplo que se usaría con daemon.json
la misma configuración del servidor DNS:
version: '3'
services:
myapp:
image: myapp
dns:
- 127.0.0.11
- 114.114.114.114
- 8.8.8.8
dns_search:
- ""
En el ejemplo anterior, dns
el campo especifica daemon.json
la misma configuración del servidor DNS que el campo y dns_search
el campo se establece en una cadena vacía, lo que indica que no se utiliza el dominio de búsqueda predeterminado.
Montar la configuración, montar el resolv.conf del host
Ruta de montaje
- "/etc/resolv.conf:/etc/resolv.conf"
Servidor de resolución 127.0.0.11
127.0.0.11
es una dirección IP especial, que es el solucionador de DNS predeterminado de Docker. Cuando utiliza el solucionador de DNS predeterminado dentro de un contenedor Docker, el contenedor envía consultas de DNS a 127.0.0.11
esta dirección.
Dentro de Docker, el contenedor ejecuta su propio servidor DNS, que maneja las consultas DNS dentro del contenedor. Por lo tanto, cuando las aplicaciones dentro del contenedor necesitan resolución DNS, envían consultas DNS a 127.0.0.11
esta dirección.
127.0.0.11
Solo funciona dentro de la red Docker y no se puede acceder a él a través del host ni de otras redes. Esta dirección solo se usa para la resolución de DNS dentro del contenedor.
Ingrese al contenedor y use la prueba de ping
Para ingresar al contenedor y usar ping
el comando, puede usar docker exec
el comando. Estos son los pasos específicos:
-
Primero, use
docker ps
el comando para ver la lista de contenedores en ejecución y busque el ID o el nombre del contenedor que desea ingresar. -
Ejecute el siguiente comando para ingresar a la terminal de línea de comando del contenedor:
docker exec -it <容器ID或名称> /bin/bash
Esto ingresará a la terminal de línea de comando del contenedor en modo interactivo. Si bash no está instalado en el contenedor, puede intentar usar
/bin/sh
u otros shells disponibles. -
ping
Después de ingresar al contenedor, puede ejecutar comandos en la terminal de línea de comandos , por ejemplo:ping <目标IP或域名>
Reemplace
<目标IP或域名>
con la dirección IP o el nombre de dominio del objetivo al que desea hacer ping.
Tenga en cuenta que para utilizar docker exec
el comando para ingresar a un contenedor, el contenedor debe estar ejecutándose. Si el contenedor está detenido, docker start
inícielo primero usando el comando.
Pruebe la resolución del nombre de dominio DNS en el contenedor
ping
Para probar si el contenedor puede resolver el nombre de dominio, puede usar el comando o dentro del contenedor nslookup
. Aquí hay dos métodos:
-
Utilice
ping
el comando para probar la resolución de nombres de dominio:- Ingrese a la terminal de línea de comando del contenedor y use
docker exec
el comando mencionado anteriormente. - Dentro del contenedor, ejecute
ping
el comando y especifique el nombre de dominio, por ejemplo:ping example.com
- Si el contenedor puede resolver y comunicarse con el nombre de dominio, se mostrará un resultado similar al siguiente:
PING example.com (93.184.216.34): 56 data bytes 64 bytes from 93.184.216.34: icmp_seq=0 ttl=57 time=13.571 ms ...
- Ingrese a la terminal de línea de comando del contenedor y use
-
Utilice
nslookup
el comando para probar la resolución de nombres de dominio:- Ingrese a la terminal de línea de comando del contenedor.
- Dentro del contenedor, ejecute
nslookup
el comando y especifique el nombre de dominio, por ejemplo:nslookup example.com
- Si el contenedor puede resolver el nombre de dominio, se mostrará un resultado similar al siguiente:
Server: 127.0.0.11 Address 1: 127.0.0.11 Name: example.com Address 1: 93.184.216.34
Tenga en cuenta que el comando anterior solo prueba la resolución de nombres de dominio dentro del contenedor. Si la configuración de DNS dentro del contenedor es incorrecta o el contenedor no puede acceder al servidor DNS, la resolución del nombre de dominio puede fallar.
Utilice dig
el comando para realizar la resolución de nombres de dominio
Si nslookup
aparece el mensaje de error "bash: nslookup: comando no encontrado" al ejecutar un comando dentro de un contenedor, significa que nslookup
el comando no está instalado en el contenedor.
En algunas imágenes base, como Alpine, etc., nslookup
es posible que no se incluya el comando. Puede intentar utilizar otros comandos disponibles para probar la resolución de nombres de dominio.
Una alternativa es utilizar dig
el comando para realizar la resolución de nombres de dominio. El siguiente es dig
un ejemplo del uso del comando:
- Ingrese a la terminal de línea de comando del contenedor.
- Dentro del contenedor, ejecute
dig
el comando y especifique el nombre de dominio, por ejemplo:dig example.com
- Si el contenedor puede resolver el nombre de dominio, se mostrará un resultado similar al siguiente:
; <<>> DiG 9.10.3-P4-Debian <<>> example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34350 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 604800 IN A 93.184.216.34 ;; Query time: 2 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon May 10 15:32:39 UTC 2021 ;; MSG SIZE rcvd: 56
Si el comando no está instalado en el contenedor dig
, puede intentar usar otros comandos disponibles, como ping
o curl
para probar la resolución de nombres de dominio.
Instale el comando dig en el servidor Linux
Para instalar el comando en un sistema Linux dig
, puede seguir los pasos a continuación:
-
Abra una terminal o símbolo del sistema.
-
Utilice el administrador de paquetes apropiado para su distribución de Linux para instalar
dig
el comando. Los siguientes son comandos de instalación para algunas distribuciones de Linux comunes:-
Debian o Ubuntu:
sudo apt-get install dnsutils
-
CentOS o RHEL:
sudo yum install bind-utils
-
Fedora:
sudo dnf install bind-utils
-
Arco Linux:
sudo pacman -S bind-tools
Dependiendo de su distribución, ejecute el comando apropiado para instalar
dig
el comando. -
-
Una vez completada la instalación, puede ejecutar comandos en la terminal
dig
para realizar la resolución de nombres de dominio. Por ejemplo:dig example.com
De esta manera, puede utilizar dig
el comando para realizar la resolución de nombres de dominio en el sistema Linux.
Error "No se puede localizar el paquete dnsutils"
Si dnsutils
encuentra el mensaje de error "No se puede localizar el paquete dnsutils" durante el proceso de instalación, significa que el paquete no está disponible en la fuente de software de la distribución que está utilizando.
dnsutils
Es un conjunto de herramientas de red de uso común que contiene dig
comandos para realizar operaciones como la resolución de nombres de dominio.
En algunas distribuciones, dnsutils
es posible que tenga otro nombre o que no esté incluido en los repositorios de software predeterminados. Puedes probar las siguientes soluciones:
-
Actualice la lista de paquetes: ejecute el siguiente comando para actualizar la lista de paquetes e intente la instalación nuevamente
dnsutils
:-
Debian o Ubuntu:
sudo apt update
-
CentOS o RHEL:
sudo yum update
-
Fedora:
sudo dnf update
-
-
Verifique el nombre del paquete: en algunas distribuciones
dnsutils
se llamabind-utils
. Intente instalarbind-utils
:-
Debian o Ubuntu:
sudo apt install bind9-dnsutils
-
CentOS o RHEL:
sudo yum install bind-utils
-
Fedora:
sudo dnf install bind-utils
-
-
Verifique las fuentes de software: es posible que deba agregar fuentes de software adicionales o actualizar las configuraciones de las fuentes de software para asegurarse de que estén
dnsutils
disponibles. Puede consultar la documentación de su distribución para aprender cómo agregar o actualizar fuentes de software.
Si nada de lo anterior funciona, puede intentar buscar kits de herramientas alternativos para su distribución o comunicarse con la comunidad o los administradores de la distribución para obtener soporte y asesoramiento.
Tenga en cuenta que diferentes distribuciones y versiones pueden tener diferentes nombres de paquetes y configuraciones de fuentes de software.
Vaciar la caché de DNS
Para vaciar la caché de DNS, los pasos específicos dependen del sistema operativo que esté utilizando. Los siguientes son métodos para actualizar la caché DNS de varios sistemas operativos comunes:
-
Sistema Windows:
- Abra la ventana del símbolo del sistema (CMD) presionando la tecla Win + R, luego ingrese
cmd
y presione Enter. - En la ventana del símbolo del sistema, ingrese el siguiente comando y presione Entrar:
ipconfig /flushdns
- Abra la ventana del símbolo del sistema (CMD) presionando la tecla Win + R, luego ingrese
-
Sistema MacOS:
- Abra la aplicación Terminal presionando la tecla Comando + barra espaciadora y luego escribiendo "Terminal".
- En una ventana de terminal, ingrese el siguiente comando y presione Enter:
sudo killall -HUP mDNSResponder
-
Sistema Linux:
- Abra la aplicación Terminal.
- En una ventana de terminal, ingrese el siguiente comando y presione Enter:
- Ubuntu/Debian:
sudo systemctl restart systemd-resolved
- CentOS/Fedora:
sudo systemctl restart NetworkManager
- Ubuntu/Debian:
Tenga en cuenta que vaciar la caché de DNS puede requerir privilegios de administrador, por lo que en sistemas Windows y macOS es posible que deba ejecutar el comando como administrador o superusuario.
Después de vaciar la caché de DNS, su computadora volverá a consultar el servidor DNS para obtener los últimos resultados de resolución de nombres de dominio.
Pruebe el sitio web de destino usando curl
Puede utilizar curl
herramientas de línea de comandos para probar el acceso al sitio web de destino. Aquí hay un curl
comando de ejemplo para acceder al sitio web de destino usando:
curl https://api.weixin.qq.com/cgi-bin/token //替换为你自己解析的域名url
Este comando enviará https://api.weixin.qq.com/cgi-bin/token
una solicitud GET e imprimirá la respuesta del servidor a la terminal.
Asegúrese de que su computadora tenga instaladas las herramientas de línea de comando curl
y pueda ejecutarlas a través de la terminal o el símbolo del sistema.
Después de ejecutar el comando anterior, observe la salida del terminal y verá los resultados de la respuesta del sitio web de destino. Si la respuesta se puede obtener con éxito, significa que se puede acceder normalmente al sitio web de destino.