WedX - журнал о программировании и компьютерных науках

Docker-compose: база данных не инициализирована

У меня проблема с docker-compose и mysql:

докер-compose.yml

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD:

   app:
    depends_on:
      - db
    image: eboraas/apache-php
    links:
      - db
    ports:
      - "80:80"
    volumes:
      - ./sito/:/var/www/html/

Произошла ошибка при создании этого контейнера:

Recreating phpapp_phpapache_1
Attaching to phpapp_db_1, phpapp_phpapache_1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
phpapache_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.30.0.3. Set the 'ServerName' directive globally to suppress this message
phpapp_db_1 exited with code 1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified

Но у базы данных нет пароля. Как я могу это решить?



Ответы:


1

Согласно документации вместо MYSQL_ROOT_PASSWORD: вы должны использовать - и =, а также вы должны использовать «пароль». Результатом будет:

- MYSQL_ROOT_PASSWORD=some_password

В вашем примере:

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=some_password
07.03.2017

2

Я просто хотел кое-что указать, если использовать команду docker run в терминале, а не docker-compose, это будет команда:

docker run -e MYSQL_ROOT_PASSWORD=password mysql_image

Обратите внимание, что это не сработает, если вы поставите -e MYSQL_ROOT_PASSWORD=password после mysql_image.

04.12.2019

3

Проблема появится, если вы не укажете значение для MYSQL_ROOT_PASSWORD (другие случаи описаны ниже).

Вы можете использовать один из следующих синтаксисов ниже:

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
 - MYSQL_ROOT_PASSWORD=strongrootpassword

Если вы хотите использовать пустой/пустой пароль, используйте следующее:

MYSQL_ALLOW_EMPTY_PASSWORD=1

Если вы хотите установить случайный пароль, используйте следующее:

MYSQL_RANDOM_ROOT_PASSWORD=1

Затем вы можете получить сгенерированный пароль, используя

docker logs container_name_or_id 

В конце вам нужно указать ОДИН из MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD и MYSQL_RANDOM_ROOT_PASSWORD в соответствии с точкой входа образа MySQL:

  • -z — проверить, что переменная не пуста
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    echo >&2 'error: database is uninitialized and password option is not specified '
    echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
    exit 1
fi
06.03.2019
  • Привет Мостафа, я не смог получить доступ к сгенерированному паролю с помощью `docker logs ‹container-id›, как я могу получить доступ к паролю? 30.07.2019

  • 4

    Похоже, вы ничего не устанавливаете для MYSQL_ROOT_PASSWORD. Согласно документации, это необходимо.

    https://hub.docker.com/_/mysql/

    MYSQL_ROOT_PASSWORD

    Эта переменная является обязательной и определяет пароль, который будет установлен для учетной записи root суперпользователя MySQL.

    24.09.2016
  • здорово... и как ты это делаешь? docker run -e MYSQL_ROOT_PASSWORD=root не работает 08.02.2019
  • Это работает. Посмотрите официальную документацию. Если вы запустите printenv в своем контейнере, вы должны увидеть установленные переменные env. hub.docker.com/_/mysql 13.02.2019

  • 5

    мы можем использовать

    docker container run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=password mysql
    

    можно дать любое имя и любой пароль

    08.04.2020
  • Это не то, как следует использовать MYSQL_RANDOM_ROOT_PASSWORD. он принимает значения true или false (по умолчанию true) для генерации случайного пароля, если не установлено MYSQL_ROOT_PASSWORD. Для получения дополнительной информации вы можете проверить следующее dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/ 02.02.2021

  • 6

    Как уже упоминалось, присвойте фактическое значение элементу MYSQL_ROOT_PASSWORD в разделе environment. Ссылку на пример, который я использовал ранее, см. здесь:

    https://github.com/alexmacarthur/local-docker-db/blob/master/mysql/docker-compose.yml#L12

    Если вы не хотите хранить пароль в файле docker-compose.yml, вы также можете передать файл .env, содержащий значение, а затем игнорировать этот файл в своем репозитории. Пример того, как это может выглядеть, приведен здесь (с использованием DyanmoDB, но это та же концепция):

    https://github.com/alexmacarthur/local-docker-db/blob/master/dynamo/docker-compose.yml#L17

    20.07.2021

    7

    Вы также можете добавить проверку работоспособности, чтобы убедиться, что ваша база данных доступна до запуска вашего приложения php.

    db:
    image: mysql
    container_name: ${MYSQL_SERVER_NAME}
    ports:
        - "${MYSQL_LOCALPORT}:${MYSQL_PORT}"
    environment:
        - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
        - "MYSQL_USER=${MYSQL_USER}"
        - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
    healthcheck:
            test: ["CMD", "mysqladmin" ,"ping", "-h", "${MYSQL_SERVER_NAME}"]
            timeout: 10s
            retries: 10
    restart: always
    

    И добавьте это в свое приложение:

        depends_on: 
        db:
            condition: service_healthy
    
    20.07.2021

    8

    на всякий случай, если кто-то придет сюда, как я

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
    

    остальное здесь https://hub.docker.com/_/mysql

    29.07.2021
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]