2015-12-08 2 views
2

Я пытаюсь получить доступ к моему приложению django, работающему в Docker, на моем компьютере с Windows. Я использую докер-машину. Я уже несколько часов занимаюсь этим.Docker-machine Port Forwarding на Windows не работает

Вот мой Dockerfile для моего Джанго приложения:

FROM python:3.4-slim 

RUN apt-get update && apt-get install -y \ 
     gcc \ 
     gettext \ 
     vim \ 
     curl \ 
     postgresql-client libpq-dev \ 
    --no-install-recommends && rm -rf /var/lib/apt/lists/* 

EXPOSE 8000 
WORKDIR /home/ 
# add app files from git repo 
ADD . server/ 
WORKDIR /home/server 
RUN pip install -r requirements.txt 
CMD ["python", "manage.py", "runserver", "8000"] 

Так что должно быть обнажая (по крайней мере, в контейнере) порт 8000.

Когда я использую команду docker-machine ip default Я учитывая IP 192,168 .99.101. Я перехожу на этот IP-адрес на порт 8000, но не получаю ответа.

Я пошел в VirtualBox, чтобы увидеть, будет ли переадресовывать эти порты. Вот конфигурация:

VirtualBox port forwarding config

Я также попытался использовать 127.0.0.1 в качестве хоста IP. Я также попытался отключить брандмауэр Windows.

Вот моя команда для запуска контейнера:

docker run --rm -it -p 8000:8000 <imagename> 

Я в недоумении о том, почему я не могу подключиться по этому порту. Когда я запускаю docker-machine ls, он дает мне tcp://192.168.99.101:2376, и когда я перехожу к нему, он возвращает мне какой-то файл, поэтому я знаю, что док-машина активна на этом порту.

Кроме того, когда я бегу docker ps я получаю это:

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
5c00cc28a2bd  <image name>   "python manage.py run" 7 minutes ago  Up 7 minutes  0.0.0.0:8000->8000/tcp drunk_knuth 

Любая помощь будет принята с благодарностью.

ответ

0

Проблема заключалась в том, что сервер работал на 127.0.0.1, когда он должен был работать на 0.0.0.0.

Я изменил CMD линию в Dockerfile от

CMD ["python", "manage.py", "runserver", "8000"]

в

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

и теперь он работает.