web-dev-qa-db-ja.com

Djangoおよびdocker-composeを使用したmysqlコンテナーのリンク

私はdocker-composeチュートリアル here (Djangoとpostgresコンテナーをリンクする)に従っています。チュートリアルを実行することはできましたが、mysqlコンテナーを使用して同じことを繰り返すことはできません。以下は私のdockerfileとdocker-compose.ymlです `

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

_docker-compose up_を実行すると、どちらも正常にビルドされますが、Djangoビューのいずれかでos.environ.keys()を実行すると、表示されないため、db環境変数がDjangoコンテナに渡されないようです予期されるDB_ *環境変数のいずれか。 mysqlには別の設定が必要ですか、それとも何か不足していますか?ありがとうございました。

[編集] Docker作成バージョン

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

Dockerバージョン

_Docker version 1.6.2, build 7c8fca2
_
13
michaelmwangi

Django settings.pyファイルで、次のようなものがあることを確認してください:

DATABASES = {
'default': {
    'ENGINE': 'Django.db.backends.mysql',
    'NAME': 'Django1',
    'USER': 'Django',
    'PASSWORD': 'password', 
    'Host': 'db',
    'PORT': 3306,
    }
}

次に、あなたのdocker-compose.ymlファイルで、次の行に沿って何かがあることを確認してください:

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

次に、docker/Djangoチュートリアルに従って、次を再度実行してすべてを再構築し、物事が機能し始めるはずです

docker-compose run web Django-admin.py startproject composeexample .

さらなる質問への回答として、新しいデータベースを作成する場合、mysql rootパスワード変数がdockerに必要です。

編集:上記のdocker-composerunを追加しました。コメントの編集を参照

13

環境変数について心配する必要はありません。コンテナーをリンクするときは、ホスト名のように、リンクで定義されたコンテナーエイリアスを使用します。

例えばあなたのdocker-compose.ymlファイルは:

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

Django設定では、データベースのホストをmydbに設定する必要があります。

3
Thomasleveil

まず、設定ファイルを変更する必要があります...

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

次に、docker-composeコマンドを適切に使用した場合、コンテナがリンクされ、docker-compose.ymlファイルのdbに基づいてホスト名linksが適切に解決されるはずです。

それでも、環境を確認したい場合は...

~/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
2
dnozay