Здесь вам нужно соединить две части головоломки:
https://www.postgresql.org/docs/9.5/app-initdb.html
initdb учит, как передавать информацию о кодировании в функцию создания базы данных.
В официальном образе Docker postgres указано, что вы можете передавать параметры в initdb:
https://hub.docker.com/_/postgres
Следовательно, ответ будет примерно таким:
база данных:
изображение: postgres: последний
тома:
- БД:/var/lib/postgresql/данные
среда:
POSTGRES_PASSWORD: тест
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --lc-collate=C --lc-ctype=C'
Или подобные аргументы. Я проигнорировал параметр lang, так как это не официальная опция «передать этот флаг в postgres» на странице руководства (первая ссылка, которую я включил).
Мои тесты не запускали это с помощью docker compose, это было в командной строке с использованием параметра -e. Однако это та же самая концепция; «среда» в docker compose — это -e в командной строке. А именно:
https://docs.docker.com/engine/reference/commandline/run/
--env , -e Установить переменные среды
Тест № 1 только с установленным паролем env:
docker run -e POSTGRES_PASSWORD = тест postgres: последний
Вот вывод запуска по умолчанию:
postgres@cbf23636dabc:~$ psql
psql (13.4 (Debian 13.4-1.pgdg100+1))
Введите "помощь" для помощи.
postgres=# \l
Список баз данных
Имя | Владелец | Кодирование | Разобрать | Тип | Права доступа
-----------+----------+-----------+------------+--- ------------------------+-----------------------
постгрес | постгрес | UTF8 | en_US.utf8 | en_US.utf8 |
шаблон0 | постгрес | UTF8 | en_US.utf8 | en_US.utf8 | =с/постгрес +
| | | | | postgres=CTc/postgres
шаблон1 | постгрес | UTF8 | en_US.utf8 | en_US.utf8 | =с/постгрес +
| | | | | postgres=CTc/postgres
Тест № 2, с установленными выше переменными окружения в предложенном докере композицию только в CLI:
docker run -e POSTGRES_PASSWORD=test -e POSTGRES_INITDB_ARGS='--encoding=UTF-8 --lc-collate=C --lc-ctype=C' postgres:latest
И затем вывод:
postgres@b6b80c876f3e:~$ psql
psql (13.4 (Debian 13.4-1.pgdg100+1))
Введите "помощь" для помощи.
postgres=# \l
Список баз данных
Имя | Владелец | Кодирование | Разобрать | Тип | Права доступа
-----------+----------+-----------+---------+------ -+--------------------------------------
постгрес | постгрес | UTF8 | С | С |
шаблон0 | постгрес | UTF8 | С | С | =с/постгрес +
| | | | | postgres=CTc/postgres
шаблон1 | постгрес | UTF8 | С | С | =с/постгрес +
| | | | | postgres=CTc/postgres
Обратите также внимание на раздел на официальной странице образа Postgresql Docker, где описаны сценарии инициализации. Это то, на что вы также можете обратить внимание.