В моем контейнере локаль настроена на 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, но экспорт не имеет никакого эффекта.
Эти настройки привязаны к сеансу оболочки, а не к ОС. Чтобы сделать его привязанным к ОС, вы должны записать его в файлы ОС, но при перезапуске службы он применит образ без этих изменений.
Итак, это должно быть установлено в 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/
Да, Дэвид. Dockerfile — один из лучших вариантов. такие же изменения можно указать в DockerFile.
Вам придется повторять это вручную, вручную, надеясь точно вспомнить, что вы делали, каждый раз, когда базовые изображения имеют какое-то обновление. Ответ @samthegolden на использование Dockerfile намного лучше: вообще никогда не следует использовать
docker commit
.