2015-06-24 17 views
9

Ho seguito il tutorial here della docker-compose (collegamento del contenitore django e postgres). Sebbene sia stato in grado di portare a termine il tutorial, tuttavia, non sono in grado di procedere ripetendo lo stesso utilizzando un contenitore mysql. Di seguito sono il mio dockerfile e finestra mobile-compose.yml `Collegamento di contenitori django e mysql utilizzando la finestra mobile-comporre

db: 
    image: mysql 
web: 
    build: . 
    command: python manage.py runserver 0.0.0.0:8000 
    volumes: 
    - .:/code 
    ports: 
    - "8000:8000" 
    links: 
    - db:db 

` dockerfile

FROM python:2.7 
RUN mkdir /code 
WORKDIR /code 
RUN pip install mysql-python 
RUN pip install django 

Entrambi costruire bene quando faccio docker-compose up ma sembra le variabili d'ambiente db non sono passati a il contenitore django da quando eseguo os.environ.keys() in una delle mie viste di django non riesco a vedere nessuna delle variabili di ambiente DB_ * previste. Quindi mysql richiede una configurazione diversa o mi manca qualcosa. Grazie.

[EDIT] Docker comporre versione

docker-compose version: 1.3.0 
CPython version: 2.7.9 
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013 

Docker versione

Docker version 1.6.2, build 7c8fca2 
+0

Quali versioni di Docker e finestra mobile-composizione stai usando? Puoi condividere l'output di 'docker-compose up'?Puoi anche condividere l'output di 'weber di esecuzione docker-compose 'come suggerito da @dnozay – Thomasleveil

+0

https://hub.docker.com/_/mysql/#environment-variables – user81269

+0

https://github.com/pahaz/ docker-compose-django-postgresql-radis-example - django + redis + postgres + nginx compose esempio – pahaz

risposta

2

non c'è bisogno di preoccuparsi di variabile d'ambiente. Quando si collegano insieme i contenitori, si utilizza semplicemente l'alias del contenitore definito dal collegamento come se fosse il nome host.

per esempio se il file docker-compose.yml sono stati:

db: 
    image: postgres 
web: 
    build: . 
    command: python manage.py runserver 0.0.0.0:8000 
    volumes: 
    - .:/code 
    ports: 
    - "8000:8000" 
    links: 
    - db:mydb 

Nelle impostazioni Django si dovrà impostare l'host del database per mydb.

+1

Grazie per la tua risposta per favore controlla la mia modifica. Avevo commesso l'errore di usare postgres nella domanda invece di mysql nel docker-compose.yml. Era un errore di copia incolla. Ho comunque provato il tuo approccio e ottengo Unknown mysql server host 'mydb' – michaelmwangi

2

In primo luogo è necessario modificare il file di impostazioni ...

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'postgres', 
     'USER': 'postgres', 
     'HOST': 'db', 
     'PORT': 5432, 
    } } 

Quindi se è stato utilizzato il comando docker-compose correttamente, i contenitori dovrebbero essere collegati, e dovrebbe risolvere il nome host db correttamente in base alla links in il file docker-compose.yml.

Eppure, se si desidera controllare l'ambiente ...

~/django-example: docker-compose run web env 
Starting djangoexample_db_1... 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=66ff09ed8632 
TERM=xterm 
DJANGOEXAMPLE_DB_1_PORT=tcp://172.17.0.35:5432 
DJANGOEXAMPLE_DB_1_PORT_5432_TCP=tcp://172.17.0.35:5432 
DJANGOEXAMPLE_DB_1_PORT_5432_TCP_ADDR=172.17.0.35 
DJANGOEXAMPLE_DB_1_PORT_5432_TCP_PORT=5432 
DJANGOEXAMPLE_DB_1_PORT_5432_TCP_PROTO=tcp 
DJANGOEXAMPLE_DB_1_NAME=/djangoexample_web_run_2/djangoexample_db_1 
DJANGOEXAMPLE_DB_1_ENV_affinity:container==52c78c810792b0e7b9a231eab7ab7a3d50c95b76faf0abb8ec38a7d1ff0c7e5f 
DJANGOEXAMPLE_DB_1_ENV_LANG=en_US.utf8 
DJANGOEXAMPLE_DB_1_ENV_PG_MAJOR=9.4 
DJANGOEXAMPLE_DB_1_ENV_PG_VERSION=9.4.4-1.pgdg70+1 
DJANGOEXAMPLE_DB_1_ENV_PGDATA=/var/lib/postgresql/data 
DB_PORT=tcp://172.17.0.35:5432 
DB_PORT_5432_TCP=tcp://172.17.0.35:5432 
DB_PORT_5432_TCP_ADDR=172.17.0.35 
DB_PORT_5432_TCP_PORT=5432 
DB_PORT_5432_TCP_PROTO=tcp 
DB_NAME=/djangoexample_web_run_2/db 
DB_ENV_affinity:container==52c78c810792b0e7b9a231eab7ab7a3d50c95b76faf0abb8ec38a7d1ff0c7e5f 
DB_ENV_LANG=en_US.utf8 
DB_ENV_PG_MAJOR=9.4 
DB_ENV_PG_VERSION=9.4.4-1.pgdg70+1 
DB_ENV_PGDATA=/var/lib/postgresql/data 
DB_1_PORT=tcp://172.17.0.35:5432 
DB_1_PORT_5432_TCP=tcp://172.17.0.35:5432 
DB_1_PORT_5432_TCP_ADDR=172.17.0.35 
DB_1_PORT_5432_TCP_PORT=5432 
DB_1_PORT_5432_TCP_PROTO=tcp 
DB_1_NAME=/djangoexample_web_run_2/db_1 
DB_1_ENV_affinity:container==52c78c810792b0e7b9a231eab7ab7a3d50c95b76faf0abb8ec38a7d1ff0c7e5f 
DB_1_ENV_LANG=en_US.utf8 
DB_1_ENV_PG_MAJOR=9.4 
DB_1_ENV_PG_VERSION=9.4.4-1.pgdg70+1 
DB_1_ENV_PGDATA=/var/lib/postgresql/data 
LANG=C.UTF-8 
PYTHON_VERSION=2.7.10 
PYTHON_PIP_VERSION=7.0.3 
PYTHONUNBUFFERED=1 
HOME=/root 
+0

Ciao grazie per la tua risposta scusami ma ho fatto un errore di copia incollare per favore vedi il mio file modificato docker-compose.yml. Grazie – michaelmwangi

5

In Django settings.py file di assicurarsi di avere qualcosa di simile:

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': 'django1', 
    'USER': 'django', 
    'PASSWORD': 'password', 
    'HOST': 'db', 
    'PORT': 3306, 
    } 
} 

poi nella vostra docker-compose.yml file assicurarsi di avere qualcosa sulla falsariga di:

db: 
    image: mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: docker 
    MYSQL_DATABASE: docker 
    MYSQL_USER: docker 
    MYSQL_PASSWORD: docker 

poi come per la finestra mobile/django esercitazione si è in seguito eseguire il seguente nuovo per ricostruire tutto e le cose dovrebbero iniziare a lavorare

docker-compose web django-admin.py startproject composeexample . 
+0

Fantastico, mi ha aiutato finalmente. Ancora non sei sicuro di come funziona 'HOST: 'db''? – sam

+0

Ciao Sam, l'HOST è il nome di dominio completo o l'indirizzo IP di un host di database remoto. Se lasci il valore vuoto significa che usi un database sul localhost. Ho anche avuto successo con la specifica localhost come 'HOST': '127.0.0.1' ma dovresti essere in grado di lasciarlo in bianco. – AnotherLongUsername

Problemi correlati