首页 文章

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

提问于
浏览
13

我一直在关注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 时它们都构建正常但是似乎db环境变量没有传递给django容器,因为当我在我的一个django视图中运行 os.environ.keys() 时,我看不到任何预期的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

3 回答

  • 3

    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 .
    

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

    编辑:将 run 添加到 docker-compose 以上;看编辑评论

  • 2

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

    例如,如果您的 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 .

  • 11

    首先,您需要修改设置文件...

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

    然后,如果正确使用 docker-compose 命令,则应链接容器,并且应根据 docker-compose.yml 文件中的 links 正确解析主机名 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
    

相关问题