使用docker-compose链接django和mysql容器

我一直在这里跟随docker-compose教程(链接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时,它们都可以正常工作docker-compose up但是似乎db环境variables没有传递给django容器,因为当我在我的一个django视图中运行os.environ.keys()时,我看不到任何预期的DB_ *环境variables。 那么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教程,再次运行以下内容以重build所有内容,并开始工作

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

你不需要担心环境variables。 将容器链接在一起时,只需使用由链接定义的容器别名就好像它是主机名一样。

例如,如果你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文件中的links正确parsing主机名db

不过,如果你想检查环境…

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