Docker DNS issue on CentOS7

2019-10-03

DNS name resolution doesn’t work in Docker containers

The case of the following production server environment.

  • CentOS7
  • Docker

DNS name resolution doesn’t work, when it access a endpoint outside docker container. One of the following two ways that sets up dns on docker container resolves the issue.

Set up dns in “docker-compose.yml" directly

update docker-compose.yml with the following.

version: '3.3'
services:
  app:
      restart: always
      dns: 8.8.8.8

Mounting resolv.conf file to container

You create the following resolv.conf file, then you mount the flie at /etc/resolv.conf inside the container.

search google.internal
nameserver 8.8.8.8
options ndots:0

DNS resolution doesn’t work in Docker after reboot CentOS

Despite taking the above two ways, sometimes DNS doesn’t resolve in Docker after reboot server.

It is necessary running the docker.service after network-online.target service. The following is the default [Unit] in docker.service.

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket

But sometimes docker.service begin to run before the network setting on network-online.target is completed. I found the solution that include the following in the [Service].

[Service]
ExecStartPre=/bin/sleep 5

This is unreasonable way waiting 5s. But it work correctry.
参考: https://github.com/clearlinux/distribution/issues/157