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

mic*_*ngi 13 mysql django docker dockerfile docker-compose

我一直关注这里的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
Run Code Online (Sandbox Code Playgroud)

`dockerfile

FROM python:2.7
RUN mkdir /code
WORKDIR /code
RUN pip install mysql-python
RUN pip install django
Run Code Online (Sandbox Code Playgroud)

它们在我这样做时都很好,docker-compose up但似乎db环境变量没有传递给django容器,因为当我os.environ.keys()在我的一个django视图中运行时,我看不到任何预期的DB_*环境变量.所以mysql需要不同的设置或我错过了什么.谢谢.

[编辑] Docker撰写版本

docker-compose version: 1.3.0
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
Run Code Online (Sandbox Code Playgroud)

Docker版本

Docker version 1.6.2, build 7c8fca2
Run Code Online (Sandbox Code Playgroud)

Ano*_*ame 12

Django settings.py文件中,请确保您具有以下内容:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django1',
    'USER': 'django',
    'PASSWORD': 'password', 
    'HOST': 'db',
    'PORT': 3306,
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的docker-compose.yml文件中确保您有以下内容:

db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: docker
    MYSQL_DATABASE: docker
    MYSQL_USER: docker
    MYSQL_PASSWORD: docker
Run Code Online (Sandbox Code Playgroud)

然后按照docker/django教程,您将再次运行以下内容来重建所有内容,并且应该开始工作

docker-compose run web django-admin.py startproject composeexample .
Run Code Online (Sandbox Code Playgroud)

在回答另一个问题时,docker在创建新数据库时需要mysql root密码变量.


Tho*_*eil 3

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

例如,如果您的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
Run Code Online (Sandbox Code Playgroud)

在 django 设置中,您必须将数据库主机设置为mydb.