Docker 差异 postgres:12 来自 postgres:12-alpine

Vla*_*dys 5 postgresql docker

Docker 集线器包含 Postgres 数据库的多个版本(标签),例如:

  • 12.3、12、最新
  • 12.3-高山、12-高山、高山-...

postgres 12.3 版和 12.3-alpine 之间有什么区别?

Sat*_*net 11

Alpine 是 Linux 的一个小得多的版本,它导致比完整的 postgres 映像更小的容器。有人认为,由于其体积小,高山也更安全。尽管 alpine 的一个缺点是它包含的功能比运行完整 Linux 操作系统的 docker 映像少得多。

  • 这取决于个人喜好。我个人更喜欢尽可能运行 Alpine,但有时可能会更复杂,因为可能会丢失某些包,从而使创建适当的 Docker 镜像变得更加困难。 (5认同)

小智 10

为数据库选择 docker 镜像时应该非常小心。事实上,Alpine 和 Debian 中的 PostgreSQL 使用不同的排序规则。

某些 Alpine 图像使用不支持 LC_COLLATE 的 musl 库版本 (1.1.16),因此尽管设置了 LANG 变量,数据仍将按字节排序 (C)。

LC_COLLATE 应添加到 musl 版本 1.1.17

但这可能会造成灾难性的问题:一旦 musl 支持 LC_COLLATE,所有 Postgres VARCHAR 索引都将崩溃。

更多讨论见:

我自己尝试了一下:

来自 postgres:13-alpine

postgres=# select 'a' > 'A';
 ?column? 
----------
 t
(1 row)

postgres=# select 'a' < 'A';
 ?column? 
----------
 f
(1 row)

Run Code Online (Sandbox Code Playgroud)

来自 postgres:13

postgres=# select 'a' > 'A';
 ?column? 
----------
 f
(1 row)

postgres=# select 'a' < 'A';
 ?column? 
----------
 t
(1 row)

Run Code Online (Sandbox Code Playgroud)

  • 请注意,现在有 **Postgres 15** 的解决方法。请参阅 https://github.com/docker-library/postgres/issues/1004#issuecomment-1280559846 和 https://github.com/docker-library/docs/blob/master/postgres/README.md#locale-customization 。我刚刚尝试了您的示例 `select 'a' &gt; 'A'` 和 `select 'a' &lt; 'A'` 以及 **postgres:15-alpine** 用 `-e LANG=en-US.utf8 -e 初始化POSTGRES_INITDB_ARGS="--locale-provider=icu --icu-locale=en-US"` 它确实按预期工作! (3认同)

Hak*_*lek 5

  • postgres:12.3基于Debian
  • postgres:12.3-alpine基于高山

主要是图片大小和内容不同:

在此处输入图片说明