Установка локали внутри контейнера докеров

В моем контейнере локаль настроена на POSIX, и я хочу ее изменить. После этого я выхожу из контейнера и снова захожу в него, а локаль возвращается к POSIX. Я не хочу создавать новый образ или запускать новый контейнер, потому что у нас много контейнеров на нескольких машинах.

Выполнение этого:

DEBIAN_FRONTEND=noninteractive apt-get install -y locales
sed -i -e 's/# pt_PT ISO-8859-1/pt_PT ISO-8859-1/' /etc/locale.gen
dpkg-reconfigure --frontend=noninteractive locales
export LANGUAGE=pt_PT
export LANG=pt_PT
export LC_ALL=pt_PT

Отлично работает в запущенном контейнере, но выход и повторный вход в контейнер приводит к потере изменений.

Уже пробовал этот код в контейнере Entrypoint, но экспорт не имеет никакого эффекта.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
3 658
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Эти настройки привязаны к сеансу оболочки, а не к ОС. Чтобы сделать его привязанным к ОС, вы должны записать его в файлы ОС, но при перезапуске службы он применит образ без этих изменений.

Итак, это должно быть установлено в Dockerfile для привязки к изображению, например:

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y locales && \
    sed -i -e 's/# pt_PT ISO-8859-1/pt_PT ISO-8859-1/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales
ENV LANG pt_PT  
ENV LANGUAGE pt_PT  
ENV LC_ALL pt_PT  

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

вы можете использовать «docker commit» для этой цели.

докер коммит

Ссылка: https://docs.docker.com/engine/reference/commandline/commit/

Вам придется повторять это вручную, вручную, надеясь точно вспомнить, что вы делали, каждый раз, когда базовые изображения имеют какое-то обновление. Ответ @samthegolden на использование Dockerfile намного лучше: вообще никогда не следует использовать docker commit.

David Maze 10.04.2019 13:26

Да, Дэвид. Dockerfile — один из лучших вариантов. такие же изменения можно указать в DockerFile.

Vinod 10.04.2019 14:08

Другие вопросы по теме