即使我可以ping它,也不能在Docker中curl链接的容器

我有一个叫做后端的Docker容器,它暴露了一个端口8200,并在它内部的gunicorn后面运行一个django服务器。 这是我的Dockerfile:

FROM debian:wheezy RUN rm /bin/sh && \ ln -s /bin/bash /bin/sh && \ apt-get -y update && \ apt-get install -y -q \ curl \ procps \ python=2.7.3-4+deb7u1 \ git \ python-pip=1.1-3 \ python-dev \ libpq-dev && \ rm -rf /var/lib/{apt,dpkg,cache,log} RUN pip install virtualenv && \ virtualenv mockingbird && \ /bin/bash -c "source mockingbird/bin/activate" ADD ./requirements.txt /mockingbird/backend/requirements.txt RUN /mockingbird/bin/pip install -r /mockingbird/backend/requirements.txt ADD ./src /mockingbird/backend/src CMD ["/mockingbird/bin/gunicorn", "--workers", "8", "--pythonpath", "/mockingbird/backend/src/", "--bind", "localhost:8200", "backend.wsgi"] 

我正在运行这样的容器:

 vagrant@10:~$ sudo docker run --name backend --env-file /mockingbird/apps/backend/env/dev -d --restart always --expose 8200 mockingbird/backend 

我知道django服务器已经启动,并通过执行以下操作获得响应,并在正确的端口上进行响应:

 vagrant@10:~$ sudo docker exec -it backend /bin/bash root@b488874c204d:/# curl localhost:8200 

然后我开始一个新的容器链接到后端,如下所示:

 sudo docker run -it --link backend:backend debian:wheezy /bin/bash 

但是当我尝试curl后端,它不起作用:

 root@72946da3dff9:/# apt-get update && apt-get install curl root@72946da3dff9:/# curl backend:8200 curl: (7) couldn't connect to host 

但是,我可以ping通后端:

 root@72946da3dff9:/# ping backend PING backend (172.17.0.41): 48 data bytes 56 bytes from 172.17.0.41: icmp_seq=0 ttl=64 time=0.116 ms 56 bytes from 172.17.0.41: icmp_seq=1 ttl=64 time=0.081 ms 

任何人都知道我可以尝试debugging为什么我不能连接到我的链接的Docker容器中运行的服务? 有没有什么我在这里失踪可以卷起后端:从链接的容器8200?

这可能是一个问题: "--bind", "localhost:8200"连接到backend主机名将不被接受。 您可能要将其更改为"0.0.0.0:8200"":8200" ,具体取决于所支持的符号。