docker为Mac – 不能curl我的容器

运行Docker for Mac 17.06.0我已经创build了一个docker文件来创buildApache服务器的镜像。 注意它暴露了80端口。

FROM ubuntu:16.04 RUN apt-get update RUN apt-get install -y apache2 ADD index.html /var/www/html/ CMD /usr/sbin/apache2ctl -D FOREGROUND EXPOSE 80 

在Dockerfile的同一个文件夹中,我创build了一个简单的index.httm文件。
然后我build立并运行它使用

 docker build -t webserver . docker run -d webserver 

我使用正在运行的容器的IP地址

 docker inspect [container_name] | grep -i IPAddress 

当我curl

 curl 172.17.0.2 

我没有得到答案。

当运行-p 80:80并在curl命令中使用localhost时,我确实得到了答案。

  curl localhost 

但我想明白为什么我不能curl容器IP。

问题:

  1. 我怎样才能得到我curl的答案?
  2. 我明白,当使用docker for Mac( 链接 )时,我无法ping通我的容器。
    我可以telnet它只是为了validation端口是暴露的?
  3. 我可以SSH吗?

在Docker for Mac上,Docker引擎在使用Hyper-V的小型VM中运行。 因此,ip 172.17.0.2仅在该虚拟机内有效,而不在主机系统上有效。 请参阅https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-for-mac-environment了解更多细节,并与Docker Machine等其他虚拟机概念进行比较。

当你运行你的Docker容器时,你需要像这样绑定一个本地端口到容器:

 docker run -d -p 80:80 webserver 

其中第一个80是本地主机上的端口,第二个是容器上暴露的端口。 只要在dockerfile暴露端口是不足以从本地主机访问它。