Как подключить изображение docker к сети, составленной docker - PullRequest
1 голос
/ 24 февраля 2020

У меня есть docker-compose.yml, который определяет базу данных и образ API для разработки, но у меня также есть отдельный Dockerfile, который создает API для AWS развертывания. Для локального тестирования перед развертыванием я хочу вызвать образ базы данных с docker-compose, а затем подключить развертываемый образ API к этому экземпляру базы данных. Это ошибка с django.db.utils.OperationalError: (2005, "Unknown MySQL server host ''db'' (-2)"), указывающим, что имя хоста не существует.

Вот соответствующий файл docker-compose.yml:

version: '3.7'
services:
  db:
    image: mysql:5
    volumes:
      - type: bind
        source: ./db/docker-entrypoint-initdb.d
        target: /docker-entrypoint-initdb.d
      - type: volume
        source: mysql-data
        target: /var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: toor
    networks:
      - backend
    ports:
      - '3306:3306'
volumes:
  mysql-data:
networks:
  backend:

Команда, которую я запускаю, чтобы запустить развертываемый образ API это: docker run -p 80:80 --env-file .env --network='<app>_backend' <image>

При Django конфигурации базы данных:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
    }
}

и мой файл .env:

RDS_DB_NAME='django'
RDS_USERNAME='root'
RDS_PASSWORD='toor'
RDS_HOSTNAME='db'
RDS_PORT=3306

Есть ли что-то, что мне нужно настроить DNS для правильной работы здесь или что может быть не так?

1 Ответ

0 голосов
/ 24 февраля 2020

Благодаря ссылке @ 1002 * @ Zeitounator удаление всех цитат в .env исправило мою проблему.

Эти правила синтаксиса применяются к файлу .env:

  • Compose ожидает, что каждая строка в файле env будет в формате VAR = VAL.
  • Строки, начинающиеся с #, обрабатываются как комментарии и игнорируются.
  • Пустые строки игнорируются.
  • Специальной обработки кавычек не существует. Это означает, что они являются частью VAL.

Новый .env:

RDS_DB_NAME=django
RDS_USERNAME=root
RDS_PASSWORD=toor
RDS_HOSTNAME=db
RDS_PORT=3306
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...