我需要创建一个支持 sha3-512 哈希函数的 postgresql 11 docker 镜像。默认情况下,官方的 postgres docker 镜像不支持此功能。我已经有一些使用官方 docker 镜像的系统。我需要一个新的镜像,它的工作原理与官方镜像完全相同,只是它支持这些哈希函数。我的想法是创建官方 Dockerfile 的副本并对其进行修改。
根据此处的配置说明部分:https://www.postgresql.org/docs/11/pgcrypto.html#id-1.11.7.34.10仅当 postgresql 配置和构建时,才支持 SHA224/256/384/512 哈希函数--with-openssl
我从这里复制了 Dockerfile 和入口点脚本:
https://github.com/docker-library/postgres/tree/master/11/stretch
然后我就卡住了。我不知道如何或在哪里添加“--with-openssl”。我怀疑配置和编译发生在这个部分:
# build .deb files from upstream's source packages (which are verified by apt-get)
apt-get update; \
apt-get build-dep -y \
postgresql-common pgdg-keyring \
"postgresql-$PG_MAJOR=$PG_VERSION" \
; \
DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" \
apt-get source --compile \
postgresql-common pgdg-keyring \
"postgresql-$PG_MAJOR=$PG_VERSION" \
; \
但目前为止,我不知道该做什么,或者该改变什么。
错误本身是这样的
select digest('test','sha3-512')
SQL Error [22023]: ERROR: Cannot use "sha3-512": No such hash algorithm
看起来,没有添加额外的哈希算法:
postgres=# \df digest
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------+------------------+---------------------+------
(0 rows)
postgres=# select * from pg_available_extensions where name='pgcrypto';
name |default_version|installed_version|comment |
--------+---------------+-----------------+-----------------------+
pgcrypto|1.3 |1.3 |cryptographic functions|
答案1
在尝试了不同的可能解决方案(在帮助下)后,我发现它可以postgres:11.14-bullseye
正常工作,并且包含所有 openssl 哈希函数。有趣的是,默认postgres:11
缺少它们。