Как установить команду sudo и nano в MySql docker образе - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь подключить приложение Django к контейнеру MySql docker. Я использую последнюю версию MySql т.е. MySql 8.0 для создания контейнера. Мне удалось успешно построить контейнер MySql, но я не могу подключить его с помощью MySql Connector по умолчанию Django. Когда я запускаю команду docker-compose up, я получаю указанную ниже ошибку.

django.db.utils.OperationalError: (1045, 'Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory')

Я начал искать решение и узнал, что MySql выпустил серьезное изменение в своем подключаемом модуле аутентификации по умолчанию, который не поддерживается большинством соединителей MySql.

Чтобы решить эту проблему, мне придется установить default-authentication-plugin на mysql_native_password в my.cnf файле MySql контейнера.

Я вошел в контейнер с помощью команды docker exec -it <conatiner id> /bin/bash и также смог найти файл my.cnf внутри контейнера.

Для редактирования файла my.cnf мне нужно будет использовать команду nano, как указано ниже.

nano my.cnf

Но, к сожалению, команда nano не установлена ​​в MySql Контейнер. Для установки nano мне потребуется sudo, установленный в контейнере.

Я попытался установить sudo с помощью приведенной ниже команды, но она не сработала.

apt-get install sudo

ошибка -

Reading package lists... Done
Building dependency tree       
Reading state information... Done

Каковы возможные решения этой проблемы.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Как правило, вы не должны пытаться напрямую редактировать файлы в контейнерах. Эти изменения будут потеряны, как только контейнер будет остановлен и удален; это происходит очень регулярно, так как многие параметры Docker могут быть установлены только во время запуска, и стандартный способ обновления программного обеспечения в контейнере - это воссоздание его с более новым образом. В вашем случае вы также не можете в режиме реального времени редактировать файл конфигурации, необходимый процессу основного контейнера во время запуска, поскольку он уже прочитает файл конфигурации к тому времени, когда вы сможете его редактировать.

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

docker run --rm mysql:8 cat /etc/mysql/my.cnf > my.cnf

и отредактируйте его непосредственно на хосте, используя выбранный вами текстовый редактор. Когда вы запускаете контейнер, введите измененный файл

docker run -v $PWD/my.cnf:/etc/mysql/my.cnf ... mysql:8

или, в Docker Compose,

volumes:
  - ./my.cnf:/etc/mysql/my.cnf

Документация по * Docker Hub mysql имеет еще несколько предложений о том, как это установить; см. «Использование пользовательского MySQL файла конфигурации» там.

Хотя docker exec является чрезвычайно полезным инструментом отладки, он не должен быть частью вашего основного рабочего процесса, и я бы рекомендовал избегать его в таких случаях (При использовании подхода bind-mount вы можете добавить измененный файл конфигурации к вашей системе управления версиями и слепо docker-compose up, как обычно, не зная этой детали; подход docker exec, который вы должны будете помнить и повторять вручную каждый раз, когда вы запустил стек контейнера.)

Также обратите внимание, что вам вообще не нужно sudo в Docker. В каждом контексте, где вы можете что-то запустить (Dockerfiles, docker run, docker exec), есть какой-то способ явно указать идентификатор пользователя, поэтому вы можете docker exec -u root .... sudo обычно зависит от таких вещей, как пользователи, имеющие пароли и интерактивные подсказки, которые хорошо подходят для администрирования реального Linux хоста, но не соответствуют типичной Docker среде.

0 голосов
/ 04 марта 2020

Проблема не в sudo , потому что у вас уже есть права на установку pacakegs. Вместо этого вам следует обновить менеджер пакетов, прежде чем устанавливать новые пакеты, чтобы обновить репозитории пакетов:

RUN apt-get update
RUN apt-get install nano
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...