私は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
_
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-compose
にrun
を追加しました。コメントの編集を参照
環境変数について心配する必要はありません。コンテナーをリンクするときは、ホスト名のように、リンクで定義されたコンテナーエイリアスを使用します。
例えばあなたの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
に設定する必要があります。
まず、設定ファイルを変更する必要があります...
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