Не могу войти в только что развернутый 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 шт):

Автор решения: yava43

Проблема оказалась в символе '$' в MINIO_ROOT_PASSWORD.

Заменив пароль на более простой я смог авторизироваться.

→ Ссылка
Автор решения: CrazyElf
    environment:
      MINIO_ROOT_USER: developer
      MINIO_ROOT_PASSWORD: devpa$$w0rd
                                ^^ тут возможная проблема

Теория:

  • $ - это спецсимвол в докер файле для подстановки переменных.
  • $$ - это экранированный знак $, перестающий быть спецсимволом.

Решение:

  • Входите по паролю с одним знаком $, а не с двумя (конфиг при этом не меняйте): devpa$w0rd
  • Ещё возможное решение - взять значение в конфиге в одиночные кавычки, тогда $ не воспринимается как спецсимвол: MINIO_ROOT_PASSWORD: 'devpa$$w0rd'
  • Ну и третий вариант вы сами нашли - просто не использовать спецсимвол $
→ Ссылка
Автор решения: Total Pusher

не срабатывает авторизация по указанным 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
→ Ссылка