Linking django and mysql containers using docker-compose

后端 未结 3 1880
温柔的废话
温柔的废话 2021-01-01 22:18

I\'ve been following with the docker-compose tutorial here (linking django and postgres container). Although I was able to go through with the tutorial I\'m however not able

相关标签:
3条回答
  • 2021-01-01 22:50

    you don't need to worry about environment variable. When linking containers together you just use the container alias defined by the link as if it was the hostname.

    for instance if your docker-compose.yml file were:

    db:
      image: postgres
    web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code
      ports:
        - "8000:8000"
      links:
        - db:mydb
    

    In your django settings you would have to set the database host to mydb.

    0 讨论(0)
  • 2021-01-01 22:56

    In Django settings.py file make sure you have something like:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django1',
        'USER': 'django',
        'PASSWORD': 'password', 
        'HOST': 'db',
        'PORT': 3306,
        }
    }
    

    then in your docker-compose.yml file make sure you have something along the lines of:

    db:
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD: docker
        MYSQL_DATABASE: docker
        MYSQL_USER: docker
        MYSQL_PASSWORD: docker
    

    then as per the docker/django tutorial you are following run the following again to rebuild everything and things should start working

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

    In response to a further question, the mysql root password variable is required by docker when creating new databases.

    EDIT: added run to docker-compose above; see edit comment

    0 讨论(0)
  • 2021-01-01 23:00

    First you need to modify the settings file...

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

    Then if you used the docker-compose command properly, the containers should be linked, and it should resolve the hostname db properly based on the links in the docker-compose.yml file.

    Still, if you want to check the environment...

    ~/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
    
    0 讨论(0)
提交回复
热议问题