我关注 this关于 docker 的教程,它设置了一个小型的 hello world 服务器。
这是预期的行为:
docker run -d -p 5000:5000 training/webapp:latest python app.py
curl http://dockerhost:5000
Hello world!
但是,当我运行时出现错误
curl http://dockerhost:5000
curl: (6) Could not resolve host: dockerhost
我查看了其他一些答案并尝试了
ping http;//dockerhost:5000
unknown host http://dockerhost:5000
nslookup http://dockerhost:5000
;; connection timed out; no servers could be reached
netstat -utapen | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 0 251303 -
一些 stackoverflow 答案( curl: (6) Could not resolve host: google.com; Name or service not known )正在谈论 DNS 问题(错误的 DNS 服务器),但我不知道该怎么做才能查看这是否与我的问题有关。
最佳答案
这更像是一个 DNS
问题。
当您使用 curl
等命令时, ping
或 nslookup
或其他打开与另一端的连接的命令,它们希望您通知另一端的 IP 地址,或者可以解析为 IP 的名称。
在您的情况下,dockerhost
是名称,而不是 IP,您的系统无法将此名称解析为 IP 地址。
有很多解决方案,就像上面提到的那样。
您可以将名称的 IP 地址告知您的系统 dockerhost
但在 /etc/hosts
中插入一行文件(如果你在 Linux 机器上):
echo "127.0.0.1 dockerhost" >> /etc/hosts
或者只是编辑文件
C:\Windows\System32\drivers\etc
如果你在 Windows 机器上。这会告诉您的系统名称的 IP 地址
dockerhost
是 127.0.0.1
,与您的 localhost
相同,或者,您自己的机器。现在你应该可以
ping
它:ping dockerhost
ping
的节点和 nslookup
只需要一个名称,没有协议(protocol)( http://
)和端口( 5000
)。 curl
确实期望协议(protocol)和端口。或者你可以只使用 IP
127.0.0.1
而不是 dockerhost
.
关于curl - 使用 curl 连接到 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887775/