2016-11-28 324 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的錯誤。

據我所見,在構建期間一切正常,並據我所知,被拒絕的連接不應該依賴於此。

編輯: 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

回答

1

我解決了這個問題。我不知道爲什麼我必須指定在這條線的docker-entrypoint.sh門:

python manage.py runserver 0.0.0.0:8000 

現在docker logs ockidocky_web_1顯示通常的Django的輸出消息。

如果有人可以給出正確的解釋,我會很樂意編輯和upvote。