当前位置: 首页 > 知识库问答 >
问题:

无法在Windows Server 2019上使用docker-compose解析docker.host.internal

邢硕
2023-03-14

我需要从windows server机器中的linux容器连接到docker主机。但docker dns无法解析docker.host.internal。我已尝试添加host.docker。docker中的内部compose extra_hosts标记,并尝试用它映射我的机器ip。但这些都不起作用。

额外主机:

  • "host.docker.internal:主机网关"

额外主机:

    < Li > " host . docker . internal:my _ IP "

我还尝试检查容器中的/etc/hosts文件,但它不在那里。因为主机文件不在那里,所以docker dns无法解析host.docker.internal。

docker exec my_container_id cat /etc/hosts
/etc/hosts: No such file or directory

我的环境:

    < li >主机:Windows Server 2019 < li>docker版本:20.10.10 < li>lcow版本:v4.14.35-v0.3.9 < li>docker-compose版本:v2.9.0

我还尝试将我的docker版本更新到20.10.11,这在我的windows 10机器上运行良好。

PS C:\Windows\system32> docker version
 Client:
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.10
 Git commit:        dea9396
 Built:             Thu Nov 18 00:42:51 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.24)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:38:11 2021
  OS/Arch:          windows/amd64
  Experimental:     true

我不明白为什么docker不能创建/etc/hosts文件。

共有1个答案

姬和豫
2023-03-14

我通过在/etc/hosts文件中添加一个手动条目来完成这项工作。因为我没有使用docker desktop,所以docker deamon无法在我的容器中创建/etc/hosts文件。由于缺少此文件,我的容器无法连接到host.docker.internal。在做这件事之前,我确定了一些事情。

我检查了是否创建了网桥网络(从我的主机):

PS C:\Windows\system32> docker network ls
NETWORK ID     NAME                   DRIVER    SCOPE
9f3ee06eaa1f   nat                    nat       local
1b17a917b877   none                   null      local
56f23d8f2228   talflow_code-default   nat       local

然后我检查了nat网络,这是docker deamon创建的默认桥接网络:

PS C:\Windows\system32> docker network inspect nat
[
    {
        "Name": "nat",
        "Id": "9f3ee06eaa1f3ec923e734b18228d08b2cda9242293a2b71fd82c7a413109609",
        "Created": "2022-08-11T12:18:01.4356971-07:00",
        "Scope": "local",
        "Driver": "nat",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "windows",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.31.80.0/20",
                    "Gateway": "172.31.80.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.windowsshim.hnsid": "9C6F07F8-D106-4CD4-B3B7-C303886D4815",
            "com.docker.network.windowsshim.networkname": "nat"
        },
        "Labels": {}
    }
]

这里的网桥IP是172.31.80.1

接下来,我验证了此 IP 是否可以在我的容器内访问。请注意,我必须使用 ubuntu 容器来验证这一点。由于容器只有基本命令,所以我从dockerhub中提取最新的ubuntu映像,并在其上安装了ping,ip和路由命令,以验证容器与主机的连接性。

在我的ubuntu容器中,我输入了route命令来检查IP表

root@8a7d33102d90:/# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.31.80.1     0.0.0.0         UG    1      0        0 eth0
172.31.80.0      *               255.255.0.0     U     0      0        0 eth0

在IP路由表中,我可以将网桥IP视为默认路由。此条目验证我的容器可以与docker网桥网络通信。我可以使用此IP访问我的主机或主机IP上的任何服务(我使用主机IP,因为这是静态的,在动态IP的情况下更喜欢使用网桥网络IP或dns)

现在在我的ubuntu容器中,我可以ping桥接IP和我的主机IP:

root@8a7d33102d90:/# ping 172.31.80.1
PING 172.31.80.1 (172.31.80.1) 56(84) bytes of data.
64 bytes from 172.31.80.1: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 172.31.80.1: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 172.31.80.1: icmp_seq=3 ttl=64 time=0.116 ms

root@8a7d33102d90:/# ping 10.25.241.37
PING 10.25.241.37 (10.25.241.37) 56(84) bytes of data.
64 bytes from 10.25.241.37: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 10.25.241.37: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 10.25.241.37: icmp_seq=3 ttl=64 time=0.116 ms

请注意,10.25.241.37是我的Ethernet0适配器的IPv4地址,您可以通过在powershell中键入ipconfig命令来检查:

PS C:\Windows\system32

Windows IP Configuration


Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . :
   IPv4 Address. . . . . . . . . . . : 10.25.241.37
   Subnet Mask . . . . . . . . . . . : 255.255.255.240
   Default Gateway . . . . . . . . . : 10.25.241.33

Ethernet adapter vEthernet (nat):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::81af:fd91:a6cf:6158%15
   IPv4 Address. . . . . . . . . . . : 172.31.80.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

Ethernet adapter vEthernet (56f23d8f2228039):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::7453:b5f6:e090:b8a4%22
   IPv4 Address. . . . . . . . . . . : 172.20.0.1
   Subnet Mask . . . . . . . . . . . : 255.255.0.0
   Default Gateway . . . . . . . . . :

一旦我确认网络没有问题。我只是在我想要访问docker主机的实际容器中创建了 /etc/hosts文件。

PS C:\Windows\system32> docker exec -it a027f718c24e /bin/bash
root@a027f718c24e:/usr/local/airflow# echo '10.25.241.37 host.docker.internal' | tee -a /etc/hosts

添加此条目后,我可以从我的容器访问host.docker.internal。并不是说我添加此条目只是为了测试目的。因为我必须在正在运行的容器中添加它。因此,一旦容器停止,此文件将消失,您将需要再次创建不正确的文件。因此,我将使用计算机的 staic IP (10.25.241.37) 而不是 host.docker.internal 来向主机上托管的服务发出请求。

 类似资料:
  • 这是我的Docker-compose.yml 当我运行:docker-compose up时,日志错误显示: MySQL连接错误:(2002)php_network_getaddress:getaddrinfo失败:名称或服务不知道 警告:mysqli::mysqli():php_network_getaddress:getaddrinfo失败:名称或服务未知-第19行 警告:mysqli::my

  • 问题内容: 我的机器位于具有专用DNS服务器和用于DNS解析的专用区域的专用网络上。我可以从主机上解析此区域中的主机,但不能从主机上运行的容器中解析主机。 主持人 : 集装箱 : 很明显,Google的公共DNS服务器不会解决我的私有DNS请求。我知道我可以使用或在中设置强制设置,但是我的笔记本电脑经常切换网络。似乎应该有系统的方法来解决此问题。 问题答案: Docker 通过复制主机的,并过滤掉

  • 我试图运行在通过包含文件()在虚拟机中,但我无法连接到,并且在尝试连接失败时收到的消息如下所示: 如果您注意到,docker能够连接到docker compose文件中提到的其他服务,其中一个是前两行显示的。在docker compose文件中调用kibana的命令如下: 如果我做了,它会给我以下信息: 在这里发布这个问题之前,我在google上广泛搜索了这个问题,并尝试了人们对这个问题的各种建议

  • 问题内容: 我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。 Docker-machine正常运行,并且能够通过docker-machine ssh连接。 但是无法从docker-compose连接。 无法通过http + unix://var/run/docker.sock连接到Docker守护程序-它正在运行吗? 如果它

  • 问题内容: 我收到一条错误消息,提示我无法连接到Docker守护程序。我调查了其他人遇到类似问题的答案,但没有帮助。我正在运行Ubuntu 15.10版本。我将尝试提供我所有的信息。 Docker版本 Docker-Compose版本 如果我尝试停止或启动服务,就会发生这种情况。 如果我跑步 任何帮助将不胜感激。让我知道您是否需要更多信息。 问题答案: 我发现了这个问题,似乎可以解决我的问题。 G