使用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