Django

Docker 無法訪問主機上的 Webserver

  • February 16, 2016

我正在嘗試在 dockerized 環境中設置 pythons django

Dockerfile

FROM python:3.5-slim
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN pip install --upgrade pip
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
EXPOSE 8000

我將其建構為django-app.

碼頭工人-compose.yml

django:
 container_name: django
 image: django-app:latest
 ports:
   - "8000:8000"
 volumes:
   - ./config/startup.sh:/startup.sh
   - ./app:/code
 command: /bin/sh /startup.sh

startup.sh

#!/bin/sh
cd /code
django-admin.py startproject djagento
echo "Creating Project djagento"
cd djagento
python manage.py runserver

我使用 ubuntu 14.04 LTS 作為我的主機系統

docker exec -it django bash $curl 127.0.0.1:8000是成功的。

我正在獲取容器的 ipdocker inspect django

   "Gateway": "172.17.0.1",
   "IPAddress": "172.17.0.2"

但是當嘗試curl 172.17.0.1:8000curl 172.17.0.2:8000或捲曲127.0.0.1:8000時,除了連接重置之外,我什麼也得不到

編輯

docker ps

baada462ae72        django-app:latest   "/bin/sh /startup.sh"   6 seconds ago       Up 5 seconds        0.0.0.0:8005->8000/tcp   django

在另一個埠上,相同的結果

CONTAINER ID        IMAGE               COMMAND                 CREATED              STATUS              PORTS                    NAMES
a9d99ee563e5        django-app:latest   "/bin/sh /startup.sh"   About a minute ago   Up About a minute   0.0.0.0:8005->8000/tcp   django

謝謝

對於遇到此問題的任何人,您必須在 docker 容器內的 0.0.0.0:8000 上執行 django 伺服器,只需添加python django-admin runserver 0.0.0.0:8000我的 startup.sh 即可為我修復此問題

您的機器上還有其他使用埠 8000 的東西嗎?嘗試在主機上將埠更改為 8005 或 9005 等。我傾向於討厭使用相同的埠,因為它有時會引起混亂。

在你的 dockerfile 使用

ports:
  - '8005:8000'

實例。

後:

  • 執行 docker-compose up -d
  • 執行 docker ps
  • 看看你是否在 PORTS 下看到容器的 0.0.0.0:8005->8000/tcp。

然後嘗試在埠 8005 上捲曲 IP。

如果這仍然不起作用,請檢查容器上的 IPTables。您是否只是偶然將埠 8000 鎖定到本地?

引用自:https://serverfault.com/questions/757646