如何使用Docker for Windows为Windows容器配置DNS?

时间:2019-10-02 21:26:07

标签: windows docker dns docker-compose containers

我正在Windows的Docker上运行Windows容器。我的docker-compose.yml看起来像这样:

version: '2.4'
services:
  web:
    image: microsoft/aspnet
    platform: windows
    networks:
      webnet:
        ipv4_address: 172.0.0.2
    ports:
      - "4119:80"
    expose:
      - "80"
    dns:
      - 8.8.8.8
      - 8.8.4.4

networks:
  webnet:
    name: "custom_network"
    ipam:
      config:
        - subnet: 172.0.0.0/16
          gateway: 172.0.0.1

当我连接PowerShell并运行ping 8.8.8.8时,ping正常。但是,当我运行ping域名时,会得到以下结果:

PS C:\> ping google.com
Ping request could not find host google.com. Please check the name and try again.

对于任何其他IP /域来说都是一样的。 因此,我的容器可以访问Internet,但是无法解析域名。 解决方法是,我尝试将预填充的hosts文件注入容器,然后按该文件中的域ping正常。它可以正确解析IP地址并接收来自远程计算机的答复。

我想念什么?我应该如何配置Docker容器来解决此问题?

更新: 我的PC上具有以下Docker版本:

> docker version
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 05:26:49 2019
 OS/Arch:           windows/amd64
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          19.03.2
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.12.8
  Git commit:       6a30dfc
  Built:            Thu Aug 29 05:39:49 2019
  OS/Arch:          windows/amd64
  Experimental:     true
> docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.0.2q  20 Nov 2018

1 个答案:

答案 0 :(得分:0)

对于每个Here,如果通过CLI创建docker网络,则应该可以简单地设置:-o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S>

如果通过docker-compose文件执行此操作,请参见this answer,该建议

  dns:
   - 8.8.8.8
   - 4.4.4.4
   - 192.168.9.45

或在Windows的VM本身中对其进行设置。