nodejs / nodejs/docker-node

Set an UTF-8 locale as default, not POSIX

オープン
#1,839 コメント 1 件 リアクション 2 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Dockerfile
スター
8.6k
フォーク
2k
平均マージ
10時間 19分
マージ済み PR(30日)
16

説明

Problem

The default locale of the node image is POSIX:

$ docker run --rm node:latest locale                                       
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

node:19 has the following locales built-in:

$ docker run --rm node:19 locale -a
C
C.UTF-8
POSIX

The POSIX locale doesn't recognize UTF-8 (wc -m counts characters, not bytes).

$ docker run --rm node:latest bash -c 'echo -n 💩 | wc -m'
4
$ docker run --rm node:latest bash -c 'echo -n 💩 | LC_CTYPE=C.UTF-8 wc -m'
1

It is possible to manually enable C.UTF-8:

$ docker run --rm --env LC_CTYPE=C.UTF-8 node:latest bash -c 'echo -n 💩 | wc -m'
1

However in 2023, who doesn't need a locale supporting Unicode? ASCII is a bad default as it doesn't match a 2023 development environment.

Solution

Set LC_CTYPE=C.UTF-8 in the node image. Probably in file /etc/environment.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

Node image が /etc/environment をどのように設定しているかを調べ、続いて報告されたコマンド docker run --rm node:latest localelocale -a を実行して、利用可能なロケールを確認します。デフォルトの LC_CTYPEC.UTF-8 に設定し、環境変数の上書きを渡さずに、wc -m の Unicode の例が 1 文字を報告することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
docker
領域
infrastructure
issue の種類
機能追加
難易度
2/5
見積もり時間
1〜3時間
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
55/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。