докер, MYSQL_ROOT_PASSWORD не работают

докер-составить:

mysql:
image: mysql:5.7.16
container_name: f_mysql
volumes:
  - ./db:/var/lib/mysql
environment:
  MYSQL_ROOT_PASSWORD: sheep
expose:
  - '3306'

и я использую docker exec для ввода этого контейнера,

и я набираю echo $MYSQL_ROOT_PASSWORD, потом получаю sheep,

но пароль root mysql по-прежнему '',

когда я набираю «mysql -uroot», я вхожу в mysql.


person Silence    schedule 20.10.2016    source источник
comment
Я пробовал это локально с аналогичной настройкой (однако другая версия MySQL - я использую 5.5), и я не могу войти в MySQL без пароля. Я должен добавить переключатель -p и указать пароль.   -  person nwinkler    schedule 20.10.2016
comment
Протестировано с предоставленным составом (без громкости) и, кажется, работает нормально.   -  person Jonnix    schedule 20.10.2016


Ответы (5)


Вам нужно исправить файл docker-compose:

environment:
  - MYSQL_ROOT_PASSWORD=sheep

Ниже приведен полный docker-compose, который достигает того, что вы хотите:

version: '2'

services:
    mysql:
        image: mysql:5.7.16
        container_name: f_mysql
        volumes:
            - ./db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=sheep
        expose:
            - '3306'

Тогда с docker exec -it f_mysql /bin/bash и внутри контейнера mysql -u root -p использование овцы в качестве пароля будет единственным способом подключения к серверу mysql.

person gpapaz    schedule 20.10.2016
comment
спасибо, выложил фрагмент, есть и nginx, и php-fpm, - person Silence; 21.10.2016
comment
и окружение в nginx тоже не работает, может в моей системе какие-то проблемы, пытаюсь переустановить. - person Silence; 21.10.2016
comment
Заходите на одну службу за раз. Заставьте MySQL работать, а затем перейдите к nginx, а затем к PHP. Я сомневаюсь, что ваша система нуждается в переустановке. Кроме того, попробуйте получить некоторые журналы, и вы можете спросить о других проблемах здесь, чтобы найти решения. - person gpapaz; 21.10.2016
comment
Установил в вмваре другой центос, и докер работает очень хорошо, не знаю в чем проблема, но она решена. благодарю вас. - person Silence; 22.10.2016
comment
у меня был аналогичный случай с MYSQL_ROOT_PASSWORD=, но это не работает для меня. любая помощь, пожалуйста - person mootez; 21.10.2017

Формат для указания переменных env правильный, вы можете использовать либо

environment:
  MYSQL_ROOT_PASSWORD: a_password

OR

environment:
  - MYSQL_ROOT_PASSWORD=a_password

Для меня проблема заключалась в том, что я создал том базы данных с установленным параметром случайного пароля, а затем отключил его, но не очистил том. Поэтому, какие бы изменения я ни вносил в файл docker-compose, старый том со старой информацией для входа все еще был там.

Мне пришлось docker volume ls найти том, а затем docker volume rm <name> удалить его. После перепрошивки все заработало.

person markson edwardson    schedule 20.10.2020

Сценарий образа entrypoint никогда не будет вносить изменения в существующий database. Если вы монтируете существующий каталог данных в var/lib/mysql, то MYSQL_ROOT_PASSWORD не будет иметь никакого эффекта.

Временное решение

Удалить все неиспользуемые тома: docker volume prune

Удалите том из службы базы данных: docker volume rm <db_data>

Выключить контейнеры, удалить тома: docker-compose down --volumes

person Ashok    schedule 20.10.2020

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

Если у вас есть существующие данные, вы можете сравнить новые с предыдущими, чтобы применить правильный chmod, потому что это зависит от того, является ли docker/your-user частью корневой группы.

person Jonas Sciangula Street    schedule 12.09.2019
comment
Важен не только мод каталога, но и его владелец. Я запускаю докер с помощью sudo, поэтому мне нужно было, чтобы точка монтирования принадлежала root. - person Norman Pellet; 27.11.2020

Это произошло, когда каталог монтирования имеет ea(расширенный атрибут) на Mac.
Лучше один раз удалить каталог и создать его заново или проверить разрешение с помощью команды xattr.

$ ls -l ./db
$ xattr ls ./db
person Hiroki Matsumoto    schedule 21.01.2019