我有一个叫做后端的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"
,具体取决于所支持的符号。