我有一个名为 backend 的 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
但是当我尝试卷曲后端时,它不起作用:
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
任何人都知道我可以尝试调试为什么我无法连接到链接的 Docker 容器中运行的服务吗?我是否缺少一些东西来能够从链接的容器卷曲后端:8200?
这可能是一个问题:
"--bind", "localhost:8200"
,因为与 backend
主机名的连接将不被接受。您可能想将其更改为 "0.0.0.0:8200"
或 ":8200"
,具体取决于支持的符号。
只需确保您的应用程序正在侦听环回地址
0.0.0.0
而不是 localhost
或 127.0.0.1
。
就我而言,它由两个容器组成:golang http app 和 mongodb。虽然我能够从 mongodb 容器 ping 我的应用程序,但无法卷曲它。