curl - 使用 curl 连接到 docker

标签 curl docker

我关注 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 等命令时, pingnslookup或其他打开与另一端的连接的命令,它们希望您通知另一端的 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 地址 dockerhost127.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/

相关文章:

php - 当我尝试使用 PHP 访问 JIRA REST API 时未授权 (401)

php - JSON 原始 POST cURL 请求不起作用

mongodb - 在具有只读FS的Docker中运行Mongodb

ruby-on-rails - Ruby on Rails 为 SSL 连接正确配置 faraday http 客户端

docker - 在docker-compose up -d之后,Docker容器以代码0退出

java - 发布到服务器的 HttpPost 参数返回 HTTP 500 错误

Bash 脚本,当我不希望 echo 换行时,它会换行

php - 尝试安装 PHP curl 时出错 - Ubuntu 14.10

docker - 启动ActiveMQ 5.15.9 Docker时警告

docker - 在Ansible中全局设置TMPDIR以将Docker与/tmp上的noexec标志一起使用