Ошибка: база данных не инициализирована и пароль не указан

0

Я новичок в докере. Я следую этому руководству: https://medium.com/coderscorner/connecting-to-mysql-through-docker-997aa2c090cc. Я установил пароль root, но как только я попытался получить доступ к команде mysql, он выбрасывает эту базу данных, это неинициализированная ошибка. Кроме того, когда я делаю команду docker-compose up чтобы вытащить нужные модули, она выдает django.db.utils.InternalError: (1049, "Неизвестная база данных" bitpal "). Команда, которую я поставил, была:

docker run --name=mysql -e MYSQL_USER=root MYSQL_ROOT_PASSWORD=password -d mysql

Я считаю, что искал ответы здесь, но я не мог быть уверен в том, что случилось.

докер-compose.yml

version: '2'
services:
  # Redis
  mysql:
    image: mysql:5.7
    restart: always
    hostname: mysql
    container_name: mysql
    environment:
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DB=bitpal
    ports:
      - "3306:3306"


  # Redis
  redis:
    image: redis:latest
    restart: always
    hostname: redis
    container_name: redis
    ports:
      - "6379:6379"


  # Django web server
  bitpal:
    image: python:3.5
    restart: always
    hostname: bitpal
    container_name: bitpal
    working_dir: /bitpal
    command: ./bin/start_dev.sh
    volumes:
      - ./bitpal:/bitpal
      - ./etc/config:/etc/config
      - ./log:/log
    ports:
      - "80:80"
    links:
      - mysql
      - redis
    depends_on:
      - mysql
    environment:
      # Database
      - DB_NAME=bitpal
      - DB_USER=root
      - DB_PASSWORD=password
      - DB_HOST=mysql
      - DB_PORT=3306


  # Celery worker
  worker:
    image: python:3.5
    restart: always
    container_name: worker
    command: bash -c "./bin/install.sh && ./bin/celery_worker.sh"
    working_dir: /bitpal
    volumes:
      - ./bitpal:/bitpal
      - ./etc/config:/etc/config
      - ./log:/log
    links:
      - mysql
      - redis
    depends_on:
      - redis


  # Bitshares websocket listener
  websocket_listener:
    image: python:3.5
    restart: always
    container_name: websocket_listener
    command: bash -c "./bin/install.sh && ./bin/websocket_listener.sh"
    working_dir: /bitpal
    volumes:
      - ./bitpal:/bitpal
      - ./etc/config:/etc/config
      - ./log:/log
    links:
      - mysql
      - redis
    depends_on:
      - redis


  # Nginx
  nginx:
    image: nginx:1.12.1
    container_name: nginx
    ports:
      - "8000:80"
    volumes:
      - ./bitpal:/home/bitpal/bitpal/bitpal
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - bitpal

Мой каталог выглядит следующим образом.

'**ROOT**
     'root: .gitignore, docker-compose.yml, docker-compose-production.yml... 
     /bitpal /etc /log /nginx /public_html'

**ROOT/bitpal**
      '.gitignore, Dockerfile, Makefile, manage.py... /bin /bitpal /media 
      /static /tests'

Все файлы проекта .sh хранятся под root/bitpal/bin. wait-for-it.sh этого я wait-for-it.sh или размещаю его в папках bitpal и nginx?

Теги:
docker

1 ответ

1
Лучший ответ

Этот учебник, который вы следовали, является неполным. Он не сказал вам, что вы должны подождать, пока инициализируется db, если вы хотите его использовать.

После запуска контейнера базы данных с помощью команды run вы должны проверить журналы этого контейнера и дождаться завершения процесса инициализации БД

Вы можете сделать это с помощью:

$ docker logs -f <container name>

Где container name в вашем случае - mysql. Когда вы увидите, что db инициализирован и DB запущен, просто отсоедините (ctrl + c) от журналов и продолжайте.

Ваша БД готова к использованию сейчас.

важная записка, учитывая ваш составный файл

Этот составной файл не будет работать, потому что другие службы, такие как bitpal/worker, не ожидают инициализации службы БД.

Сначала загрузите сценарий wait-for-it.sh, который позволит другим службам дождаться вашей базы данных при использовании файла компоновки для настройки вашего приложения. Скрипт, сделанный vishnubob, доступен здесь, а затем скопируйте его во все каталоги, где требуются ваши службы, требующие базы данных.

В тех же каталогах создайте файлы docker-entrypoint.sh и напишите их следующим образом:

#!/bin/bash
set -e
sh -c './wait-for-it.sh mysql:3306 -t 30'
exec "$@"

Затем в вашем файле компоновки добавьте записи в каждую службу, для которой требуется БД (и где вы wait-for-it.sh скрипт wait-for-it.sh), который выполнит сценарий ожидания:

entrypoint: ["./docker-entrypoint.sh"]

Затем ваши службы будут ждать БД до его инициализации и готовности принимать соединения.

В редактировании я добавлю прямое дерево каталогов, чтобы вы могли более четко видеть, как эти файлы должны быть размещены.

Это один из эффективных методов, потому что depends_on не ждет инициализации службы db, как это четко указано в официальных документах.

редактировать с описанием местоположения файлов

root 
   - bitpal
      + *some service files*
      + wait-for-it.sh
      + docker-entrypoint.sh
   - some_service_requiring_db
      + *some service files*
      + wait-for-it.sh
      + docker-entrypoint.sh
   - docker-compose.yml

И ваш файл компоновки должен выглядеть следующим образом:

version: '2'
services:
  # MySQL service definition
  mysql:
    # like you have

  # some services

  # Django web server
  bitpal:
    # ...
    entrypoint: ["./docker-entrypoint.sh"]
    # further declarations
  • 0
    Мой каталог выглядит следующим образом. root: .gitignore, docker-compose.yml, docker-compose-production.yml... /bitpal /etc /log /nginx /public_html ROOT root: .gitignore, docker-compose.yml, docker-compose-production.yml... /bitpal /etc /log /nginx /public_html ROOT / bitpal .gitignore, Dockerfile, Makefile, manage.py... /bin /bitpal /media /static /tests Все файлы .sh проекта хранятся в корневом каталоге / bitpal / bin. wait-for-it.sh вместо этого wait-for-it.sh или поместить его в папки bitpal и nginx?
  • 0
    Обновление: БД кажется инициализированной, но теперь я все еще не могу подключиться к ней? Это дает мне ошибку django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'mysql' ([Errno -2] Name or service not known)")'. При запуске docker exec -ti bitpal mysql без параметров, caused exec file not found in $PATH": unknown ошибка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню