Django
Docker 無法訪問主機上的 Webserver
我正在嘗試在 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
是成功的。我正在獲取容器的 ip
docker inspect django
"Gateway": "172.17.0.1", "IPAddress": "172.17.0.2"
但是當嘗試
curl 172.17.0.1:8000
或curl 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 鎖定到本地?