我的docker容器不是在Docker for Windows上的localhost(0.0.0.0)上启动的(使用Hyper-V的Native)

时间:2016-06-23 13:17:31

标签: nginx docker

关于如何启动nginx docker容器的Digital Ocean's tutorial之后(目前在第4步)。目前这是他们的输出:

$ docker run --name docker-nginx -p 80:80 -d nginx
d3ccb73a91985651ec61231bca9f9c716f0dec807e354a29eeef2144f883a01c

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                         NAMES
b91f3ce26553        nginx               "nginx -g 'daemon off"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 443/tcp   docker-nginx

但是当我运行它时,这是我的输出(注意到容器的不同IP):

C:\>docker run --name docker-nginx -p 80:80 -d nginx
d3ccb73a91985651ec61231bca9f9c716f0dec807e354a29eeef2144f883a01c

C:\>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
d3ccb73a9198        nginx               "nginx -g 'daemon off"   14 hours ago        Up 2 seconds        10.0.75.2:80->80/tcp, 443/tcp   docker-nginx

为什么会这样?我怎样才能获得与Digital Ocean相同的结果? (让服务器在localhost上启动)

修改:我正在使用Docker for windows(最近发布的)显然使用Hyper-V运行本机。 docker-machine ls的输出是:

C:\>docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS

C:\>

4 个答案:

答案 0 :(得分:10)

  

但是当我运行它时,这是我的输出(注意到不同的IP   容器)

由于这是一台Windows机器,我假设你正在使用 Docker Toolbox Docker for Windows。 10.0.75.2 boot2docker 虚拟机的IP。

如果您使用的是Windows或Mac OS,则需要使用某种形式的虚拟化 为了运行Docker。您刚刚看到的IP是该轻量级虚拟机的IP。

  

我怎样才能获得与Digital Ocean相同的结果? (获得   服务器在localhost上启动)

使用Linux发行版!您也可以在Docker For Windows 设置中的localhost上启用 Expose容器端口:

enter image description here

答案 1 :(得分:6)

尽管您在本地计算机中创建了容器。这些实际上是在不同的机器(虚拟机)上运行的

首先,检查您的docker机器(虚拟机)的IP是什么

$docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100  

然后运行curl命令(或打开浏览器)以查看容器内nginx Web服务器上的默认网站

curl http://192.168.99.100:80

答案 2 :(得分:0)

如果您在Windows上使用虚拟机:

docker-machine ip default

https://docs.docker.com/machine/concepts/

答案 3 :(得分:0)

当我第一次运行此命令时:docker run -d -p 80:80 --name docker-tutorial docker101tutorial

我收到此错误:

docker:来自守护程序的错误响应:冲突。容器名称 容器“ LONG_CONTAINER_ID”已使用“ / docker-tutorial”。 您必须删除(或重命名)该容器才能重用该容器 名称。

因此,我尝试使用docker rm -f LONG_CONTAINER_ID

删除此容器

然后我做了:docker run -d -p 3080:80 --name docker-tutorial docker101tutorial

请注意 3080:80 而不是 80:80 ...如果我是从docker桌面上运行此命令,则会在下面看到此默认选项:

options in docker desktop