2016-11-28 3 views
0

Я довольно долго боролся с этим.Связь отказалась от контейнера 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.

Насколько я могу судить, все работает нормально во время сборки, и насколько я знаю, отказ от этой связи не должен зависеть от этого.

EDIT: После 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 

P.S. Не стесняйтесь предлагать, как я могу сделать этот проект проще для себя.

+0

Какой хост/интерфейс работает на вашем сервере Django? (должно быть 0.0.0.0, это значение по умолчанию?) Я знаю, что это не для Flask, например. – johnharris85

+0

Может быть, потому что монго слушает '27017'? –

+0

Правда, но OP пытается подключиться к Django. – johnharris85

ответ

1

Я решил проблему.Я не знаю, почему я должен указать дверь на этой линии docker-entrypoint.sh:

python manage.py runserver 0.0.0.0:8000 

Теперь docker logs ockidocky_web_1 показывает обычные выходные Джанго сообщения.

Если кто-то может дать правильное объяснение, я был бы счастлив отредактировать и перенести.