Не могу войти в только что развернутый MINIO
Разворачивался с помощью docker compose:
services:
minio:
restart: unless-stopped
image: minio/minio:latest
container_name: minio
ports:
- 9000:9000
- 9001:9001
environment:
MINIO_ROOT_USER: developer
MINIO_ROOT_PASSWORD: devpa$$w0rd
volumes:
- minio-data:/data
command: server /data --console-address ":9001"
volumes:
minio-data:
driver: local
driver_opts:
type: none
device: ./data
o: bind
ПРОБЛЕМА
после разворачивания не срабатывает авторизация по указанным MINIO_ROOT_USER MINIO_ROOT_PASSWORD
ответ сервера при попытке авторизироваться:
{"message":"invalid login"}
P.S. Перерыл много сайтов, ничего об этой проблеме не нашел. Вроде бы всё максимально просто и логично. В документации к MINIO нет как такового примера как развернуть это дело через docker compose. Нашел только способ через ручной докер контейнер.
Ответы (3 шт):
Проблема оказалась в символе '$' в MINIO_ROOT_PASSWORD.
Заменив пароль на более простой я смог авторизироваться.
environment:
MINIO_ROOT_USER: developer
MINIO_ROOT_PASSWORD: devpa$$w0rd
^^ тут возможная проблема
Теория:
$
- это спецсимвол в докер файле для подстановки переменных.$$
- это экранированный знак$
, перестающий быть спецсимволом.
Решение:
- Входите по паролю с одним знаком
$
, а не с двумя (конфиг при этом не меняйте):devpa$w0rd
- Ещё возможное решение - взять значение в конфиге в одиночные кавычки, тогда
$
не воспринимается как спецсимвол:MINIO_ROOT_PASSWORD: 'devpa$$w0rd'
- Ну и третий вариант вы сами нашли - просто не использовать спецсимвол
$
не срабатывает авторизация по указанным MINIO_ROOT_USER MINIO_ROOT_PASSWORD
Вам уже подсказали про $
. Но вообще подобные случаи можно расследовать так - посмотреть реальное окружение, которое используется в контейнере.
Первый способ - через docker inspect
# Получить id контейнера
docker compose ps
# Посмотреть информацию
docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' (id контейнера или его имя)
Аналогично делается для образов.
Вот реальный пример вывода docker inspect
для Minio (у меня старая версия):
MINIO_SECRET_KEY=secretkey
MINIO_ACCESS_KEY=access
...
Остается только взять из окружения и вставить на странице авторизации.
Второй способ - через /proc/{PID}/environ
Обычно и правильно - один процесс в контейнере, его PID=1. Командой ниже мы явно получаем окружение, которое использует процесс. (правда некоторый процессы, например MySQL, скрывают часть окружения типа пароля).
docker compose exec minio cat /proc/1/environ | tr '\0' '\n'
Третий способ - команда env
В этом случае Docker добавляет еще доп. переменные типа TERM
, HOSTNAME
, PWD
.
docker compose exec minio env