O Docker não pode acessar o Webserver no host

1

Estou tentando configurar python django dentro de um ambiente dockerizado

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

Eu construo isso para 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

Estou usando o Ubuntu 14.04 LTS como meu sistema host

docker exec -it django bash $curl 127.0.0.1:8000 é bem sucedido.

Estou recebendo o ip do meu contêiner com docker inspect django

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

Mas, ao tentar usar curl 172.17.0.1:8000 ou curl 172.17.0.2:8000 ou curl 127.0.0.1:8000 , não consigo fazer nada além de redefinir a conexão

Editar

docker ps

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

* em outro porto, mesmo resultado *

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

Obrigado

    
por xhallix 16.02.2016 / 22:14

2 respostas

3

Para alguém que tropeça nisso, você tem que executar o servidor django em 0.0.0.0:8000 dentro do container docker, simplesmente adicionando python django-admin runserver 0.0.0.0:8000 em minha startup.sh corrigido isso para mim

    
por 16.02.2016 / 23:16
1

Existe mais alguma coisa na sua máquina usando a porta 8000? Tente alterar a porta para 8005 ou 9005 etc na máquina host. Eu costumo odiar usar a mesma porta em geral apenas por causa da confusão que às vezes causa.

Em seu uso de dockerfile

ports:
   - '8005:8000'

instância.

Depois:

  • executar o docker-compose up -d
  • executar o docker ps
  • Veja se você vê 0.0.0.0:8005->8000/tcp para o container em PORTS.

Em seguida, tente curling no IP na porta 8005.

Se isso ainda não funcionar, verifique o seu IPTables no seu contêiner. Você bloqueou a porta 8000 para o local apenas por acidente?

    
por 16.02.2016 / 22:19

Tags