连接被Docker容器拒绝

问题描述:

我一直在为此奋斗了很长一段时间。连接被Docker容器拒绝

我有一个Django应用程序,我试图将它打包到容器中。

问题是,当我发布到某个端口(8001)时,主机拒绝我的连接。

$ docker-machine ip default 
192.168.99.100 

当我尝试卷曲或通过浏览器192.168.99.100:8001达到,连接被拒绝。

C:\Users\meow>curl 192.168.99.100:8001 
curl: (7) Failed to connect to 192.168.99.100 port 8001: Connection refused 

第一条评论:我使用的是Docker Toolbox。

让我们从docker-compose.yml文件开始。

version: '2' 
services: 
    db: 
    build: ./MongoDocker 
    image: ockidocky_mongo 
    web: 
    build: ./DjangoDocker 
    image: ockidocky 
    #volumes: .:/srv 
    ports: 
    - 8001:8000 
    links: 
    - db 

第二个备注:这个文件最初给了我一些从头开始构建权限的麻烦。为了解决这个问题,我分别构建了图像。

docker build -t ockidocky . 
docker build -t ockidocky_mongo . 

下面是蒙戈的dockerfile:

# Based on this tutorial. https://devops.profitbricks.com/tutorials/creating-a-mongodb-docker-container-with-an-attached-storage-volume/ 
# Removed some sudo here and there because they are useless in Docker for Windows 

# Set the base image to use to Ubuntu 
FROM ubuntu:latest 
# Set the file mantainer 
MAINTAINER meow 

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && \ 
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list && \ 
apt-get update && apt-get install -y mongodb-org 


VOLUME ["/data/db"] 
WORKDIR /data 

EXPOSE 27017 
#Edited with --smallfiles (Check this issue https://github.com/dockerfile/mongodb/issues/9) 
CMD ["mongod", "--smallfiles"] 

Dockerfile Django的是基于其他this教程。

我不会包含代码,但它的工作原理。

不必多说,最后一行是很重要的:

ENTRYPOINT ["/docker-entrypoint.sh"] 

我改变了docker-entrypoint.sh无需Gunicorn运行。

echo Start Apache server. 
python manage.py runserver 

此时docker ps告诉我,什么都在涨:

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
ddfdb20c2d7c  ockidocky    "/docker-entrypoint.s" 9 minutes ago  Up 9 minutes  0.0.0.0:8001->8000/tcp ockidocky_web_1 
2e2c2e7a5563  ockidocky_mongo  "mongod --smallfiles" 2 hours ago   Up 9 minutes  27017/tcp    ockidocky_db_1 

当我运行一个码头工人检查ockidocky和有关港口,它显示:

"Ports": { 
       "8000/tcp": [ 
        { 
         "HostIp": "0.0.0.0", 
         "HostPort": "8001" 
        } 
       ] 
      }, 

这是依赖于安装量?

这是我真正无法弄清楚的事情之一,并给我很多Docker Toolbox的错误。

据我所见,在构建期间一切正常,并据我所知,被拒绝的连接不应该依赖于此。

编辑: connectinc到容器和上市与ps -aux进程后,这是我所看到的:

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.7 3.0 218232 31340 ?  Ssl 20:15 0:01 python manage.p 
root   9 13.1 4.9 360788 50132 ?  Sl 20:15 0:26 /usr/bin/python 
root  15 0.0 0.2 18024 2596 ?  Ss 20:15 0:00 /bin/bash 
root  20 0.1 0.3 18216 3336 ?  Ss 20:17 0:00 /bin/bash 
root  33 0.0 0.2 34424 2884 ?  R+ 20:18 0:00 ps -aux 

附:随意提出我可以如何让这个项目更容易。

+0

你的Django服务器上运行什么主机/接口? (需要是0.0.0.0,是默认值吗?)我知道它不适用于Flask。 – johnharris85

+0

也许是因为mongo听“27017”? –

+0

确实如此,但OP正试图连接到Django。 – johnharris85

我解决了这个问题。我不知道为什么我必须指定在这条线的docker-entrypoint.sh门:

python manage.py runserver 0.0.0.0:8000 

现在docker logs ockidocky_web_1显示通常的Django的输出消息。

如果有人可以给出正确的解释,我会很乐意编辑和upvote。