Search code examples
djangowindowsdockerdocker-composeboot2docker

docker-compose error on the Django's welcome page


When I visit the address http://192.168.99.100:8000/ I can't see the django's welcome page in my browser.

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DO
CKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1
7.04.0-ce

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-machine ip
192.168.99.100

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-compose run web
time="2017-04-09T18:03:29-04:00" level=info msg="Unable to use system certificat
e pool: crypto/x509: system root pool is not available on Windows"
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you
 apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

April 09, 2017 - 22:03:31
Django version 1.11, using settings 'composeexample.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

is there another way (or localhost link) that I can access my django's welcome page?

enter image description here

Dockerfile

 FROM python:2.7
 ENV PYTHONUNBUFFERED 1
 RUN mkdir /code
 WORKDIR /code
 ADD requirements.txt /code/
 RUN pip install -r requirements.txt
 ADD . /code/

enter image description here

docker-compose.yml

 version: '2'
 services:
   db:
     image: postgres
   web:
     build: .
     command: python manage.py runserver 0.0.0.0:8000
     volumes:
       - .:/code
     ports:
       - "8000:8000"
     depends_on:
       - db

docker compose up

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-compose up
dockerdjangotutorial_db_1 is up-to-date
Creating dockerdjangotutorial_web_1
Attaching to dockerdjangotutorial_db_1, dockerdjangotutorial_web_1
db_1   | The files belonging to this database system will be owned by user "post
gres".
db_1   | This user must also own the server process.
db_1   |
db_1   | The database cluster will be initialized with locale "en_US.utf8".
db_1   | The default database encoding has accordingly been set to "UTF8".
db_1   | The default text search configuration will be set to "english".
db_1   |
db_1   | Data page checksums are disabled.
db_1   |
db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... o
k
db_1   | creating subdirectories ... ok
db_1   | selecting default max_connections ... 100
db_1   | selecting default shared_buffers ... 128MB
db_1   | selecting dynamic shared memory implementation ... posix
db_1   | creating configuration files ... ok
db_1   | running bootstrap script ... ok
db_1   | performing post-bootstrap initialization ... ok
db_1   |
db_1   | WARNING: enabling "trust" authentication for local connections
db_1   | You can change this by editing pg_hba.conf or using the option -A, or
db_1   | --auth-local and --auth-host, the next time you run initdb.
db_1   | syncing data to disk ... ok
db_1   |
db_1   | Success. You can now start the database server using:
db_1   |
db_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
db_1   |
db_1   | ****************************************************
db_1   | WARNING: No password has been set for the database.
db_1   |          This will allow anyone with access to the
db_1   |          Postgres port to access your database. In
db_1   |          Docker's default configuration, this is
db_1   |          effectively any other container on the same
db_1   |          system.
db_1   |
db_1   |          Use "-e POSTGRES_PASSWORD=password" to set
db_1   |          it in "docker run".
db_1   | ****************************************************
db_1   | waiting for server to start....LOG:  could not bind IPv6 socket: Cannot
 assign requested address
db_1   | HINT:  Is another postmaster already running on port 5432? If not, wait
 a few seconds and retry.
db_1   | LOG:  database system was shut down at 2017-04-09 21:55:03 UTC
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  database system is ready to accept connections
db_1   | LOG:  autovacuum launcher started
db_1   |  done
db_1   | server started
db_1   | ALTER ROLE
db_1   |
db_1   |
db_1   | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb
.d/*
db_1   |
db_1   | LOG:  received fast shutdown request
db_1   | LOG:  aborting any active transactions
db_1   | LOG:  autovacuum launcher shutting down
db_1   | LOG:  shutting down
db_1   | waiting for server to shut down....LOG:  database system is shut down
db_1   |  done
db_1   | server stopped
db_1   |
db_1   | PostgreSQL init process complete; ready for start up.
db_1   |
db_1   | LOG:  database system was shut down at 2017-04-09 21:55:04 UTC
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  database system is ready to accept connections
db_1   | LOG:  autovacuum launcher started
web_1  | Performing system checks...
web_1  |
web_1  | System check identified no issues (0 silenced).

I just open the Kitematic software enter image description here

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker --version
time="2017-04-09T20:00:54-04:00" level=info msg="Unable to use system certificat
e pool: crypto/x509: system root pool is not available on Windows"
Docker version 17.03.1-ce, build c6d412e

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-compose --version
docker-compose version 1.11.1, build 7afaa436

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-machine --version
docker-machine.exe version 0.10.0, build 76ed2a6

running of docker-compose up again

gmondesi@MRT-3-011 MINGW64 ~/Documents/GitHub/docker-django-tutorial (master)
$ docker-compose up
Starting dockerdjangotutorial_db_1
Starting dockerdjangotutorial_web_1
Attaching to dockerdjangotutorial_db_1, dockerdjangotutorial_web_1
db_1   | LOG:  database system was interrupted; last known up at 2017-04-09 22:0
0:10 UTC
db_1   | LOG:  database system was not properly shut down; automatic recovery in
 progress
db_1   | LOG:  invalid record length at 0/150F2C0: wanted 24, got 0
db_1   | LOG:  redo is not required
db_1   | LOG:  MultiXact member wraparound protections are now enabled
db_1   | LOG:  database system is ready to accept connections
web_1  | Performing system checks...
web_1  |
web_1  | System check identified no issues (0 silenced).
web_1  |
web_1  | You have 13 unapplied migration(s). Your project may not work properly
until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
web_1  | Run 'python manage.py migrate' to apply them.
web_1  | April 09, 2017 - 23:58:45
web_1  | Django version 1.11, using settings 'composeexample.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:00:03] "GET / HTTP/1.1" 400 57374
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:00:24] "GET / HTTP/1.1" 400 57486
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:00:25] "GET /favicon.ico HTTP/1.1" 400 57409
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:01:51] "GET / HTTP/1.1" 400 57486
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:01:51] "GET /favicon.ico HTTP/1.1" 400 57670
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:02:29] "GET / HTTP/1.1" 400 57159
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:02:30] "GET /favicon.ico HTTP/1.1" 400 57280
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:02:30] "GET /favicon.ico HTTP/1.1" 400 57280
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:02:37] "GET / HTTP/1.1" 400 57374
web_1  | Performing system checks...
web_1  |
web_1  | System check identified no issues (0 silenced).
web_1  |
web_1  | You have 13 unapplied migration(s). Your project may not work properly
until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
web_1  | Run 'python manage.py migrate' to apply them.
web_1  | April 10, 2017 - 00:03:08
web_1  | Django version 1.11, using settings 'composeexample.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.
web_1  | Invalid HTTP_HOST header: '192.168.99.100:8000'. You may need to add u'
192.168.99.100' to ALLOWED_HOSTS.
web_1  | [10/Apr/2017 00:03:10] "GET / HTTP/1.1" 400 57292
web_1  | Performing system checks...
web_1  |
web_1  | System check identified no issues (0 silenced).
web_1  |
web_1  | You have 13 unapplied migration(s). Your project may not work properly
until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
web_1  | Run 'python manage.py migrate' to apply them.
web_1  | April 10, 2017 - 00:03:17
web_1  | Django version 1.11, using settings 'composeexample.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.
Gracefully stopping... (press Ctrl+C again to force)
Stopping dockerdjangotutorial_web_1 ... done
Stopping dockerdjangotutorial_db_1 ... done

Solution

  • It's not clear what specifically broke, but to reach a published port in Docker, you need a few things:

    1. The port itself needs to be pushed on your docker host. To map port 8888 on the host to port 8000 inside the container, that's usually with docker run -p 8888:8000 ... or in the docker-compose.yml a section under your service with:

    ports: - 8888:8000

    1. The container application itself needs to be listening on all interfaces (0.0.0.0) on the container port (8000 in this example).

    2. You need to connect to the docker host on the published port. With docker-machine the IP will be that of the VM. You can look up the IP of the docker host with docker-machine ip or in any environment, echo $DOCKER_HOST will tell you where the docker commands are being sent.

    You had done part 1 and part 3. The container itself was listening on all interfaces, but from the various commands pasted, I suspect the service itself hadn't started all the way (possibly looking for a database since you did a docker-compose run web at one point, instead of docker-compose up) since there was one output section without the service running line. And perhaps you shutdown the service with a cont+C before checking the web page.