Назад | Перейти на главную страницу

Docker не может получить доступ к веб-серверу на хосте

Я пытаюсь настроить 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.

docker-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

Спасибо

Для тех, кто наткнется на это, вам нужно запустить сервер django на 0.0.0.0:8000 внутри контейнера докеров, просто добавив python django-admin runserver 0.0.0.0:8000 в моем startup.sh это исправлено для меня

Есть ли еще что-нибудь на вашей машине, использующей порт 8000? Попробуйте изменить порт на 8005 или 9005 и т. Д. На хост-машине. Я обычно ненавижу использовать один и тот же порт только из-за путаницы, которую он иногда вызывает.

В вашем dockerfile используйте

ports:
   - '8005:8000'

пример.

После:

  • запустить docker-compose up -d
  • запустить докер ps
  • Посмотрите, видите ли вы 0.0.0.0:8005->8000/tcp для контейнера в разделе ПОРТЫ.

Затем попробуйте скрутить IP-адрес на порту 8005.

Если это по-прежнему не работает, проверьте свои IPTables в своем контейнере. Вы случайно заблокировали порт 8000 как локальный?