
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://hub.docker.com/u/armhf/%E7%BB%84%E7%BB%87%E5%B7%B2%E8%A2%AB%E5%BC%83%E7%94%A8%EF%BC%8C%E5%BB%BA%E8%AE%AE%E4%BD%BF%E7%94%A8%E6%9B%B4%E5%85%B7%E4%BD%93%E7%9A%84https://hub.docker.com/u/arm32v7/%E5%92%8Chttps://hub.docker.com/u/arm32v6/%E7%BB%84%E7%BB%87%EF%BC%8C%E8%AF%A6%E8%A7%81https://github.com/docker-library/official-images#architectures-other-than-amd64%E3%80%82%E8%AF%B7%E7%9B%B8%E5%BA%94%E8%B0%83%E6%95%B4%E6%82%A8%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F%E3%80%82
Dockerfile链接这些镜像是非常实验性的;在https://github.com/docker-library/official-images/issues/2289%EF%BC%88%E8%BF%99%E6%98%AF%E8%BF%88%E5%90%91 proper 多架构镜像的第一步)完成之前,它们是基于最佳努力提供的
请不要将它们用于重要事项
此镜像基于同名官方镜像(postgres)的源代码构建。有关相关Dockerfile的链接,请参见该镜像的描述。
如果您想了解此镜像的具体差异,请参见https://github.com/tianon/jenkins-groovy/tree/master/dsl/docker-multiarch/images%EF%BC%8C%E8%BF%99%E4%BA%9B%E8%84%9A%E6%9C%AC%E8%B4%9F%E8%B4%A3%E5%88%9B%E5%BB%BA%E6%9E%84%E5%BB%BA%E5%AE%83%E4%BB%AC%E7%9A%84Jenkins%E4%BB%BB%E5%8A%A1%E3%80%82
获取帮助的地方:
Docker社区论坛、Docker社区Slack或Stack Overflow
提交问题的地方:
https://github.com/docker-library/postgres/issues
维护者:
https://github.com/docker-library/postgres
已发布镜像工件详情:
https://github.com/docker-library/repo-info/blob/master/repos/postgres%EF%BC%88https://github.com/docker-library/repo-info/commits/master/repos/postgres%EF%BC%89
(镜像元数据、传输大小等)
镜像更新:
https://github.com/docker-library/official-images/pulls?q=label%3Alibrary%2Fpostgres
https://github.com/docker-library/official-images/blob/master/library/postgres%EF%BC%88https://github.com/docker-library/official-images/commits/master/library/postgres%EF%BC%89
此描述的来源:
https://github.com/docker-library/docs/tree/master/postgres%EF%BC%88https://github.com/docker-library/docs/commits/master/postgres%EF%BC%89
支持的Docker版本:
https://github.com/docker/docker/releases/latest%EF%BC%88%E5%B0%BD%E6%9C%80%E5%A4%A7%E5%8A%AA%E5%8A%9B%E6%94%AF%E6%8C%81%E4%BD%8E%E8%87%B31.6%E7%89%88%E6%9C%AC%EF%BC%89
PostgreSQL,通常简称为“Postgres”,是一个对象关系型数据库管理系统(ORDBMS),强调可扩展性和标准合规性。作为数据库服务器,其主要功能是安全地存储数据并支持最佳实践,然后根据其他软件应用程序的请求(无论是同一台计算机上的应用程序还是网络上另一台计算机上运行的应用程序,包括互联网)检索数据。它可以处理从小型单机应用到具有许多并发用户的大型互联网应用的工作负载。最新版本还提供数据库本身的复制功能,以实现安全性和可扩展性。
PostgreSQL实现了SQL:2011标准的大部分内容,是ACID兼容的和事务性的(包括大多数DDL语句),使用多版本并发控制(MVCC)避免锁定问题,提供对脏读的免疫和完全可串行化;使用许多其他数据库中不可用的索引方法处理复杂的SQL查询;具有可更新视图和物化视图、触发器、外键;支持函数和存储过程以及其他可扩展性,并有大量第三方编写的扩展。除了可以与主要的专有和开源数据库一起工作外,PostgreSQL通过其广泛的标准SQL支持和可用的迁移工具支持从这些数据库迁移。如果使用了专有扩展,通过其可扩展性,可以通过一些内置和第三方开源兼容性扩展(如Oracle兼容扩展)模拟许多扩展。
***.org/wiki/PostgreSQL
!https://raw.githubusercontent.com/docker-library/docs/01c***b2fe592c1f93a13b4e289ada0e3a1/postgres/logo.png
console$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
此镜像包含EXPOSE 5432(postgres端口),因此标准容器链接将使其自动对链接的容器可用。入口点中使用initdb创建默认的postgres用户和数据库。
postgres数据库是一个默认数据库,供用户、实用程序和第三方应用程序使用。
postgresql.org/docs
console$ docker run --name some-app --link some-postgres:postgres -d application-that-uses-postgres
psqlconsole$ docker run -it --rm --link some-postgres:postgres postgres psql -h postgres -U postgres psql (9.5.0) Type "help" for help. postgres=# SELECT 1; ?column? ---------- 1 (1 row)
PostgreSQL镜像使用几个容易被忽略的环境变量。虽然这些变量都不是必需的,但它们可能对您使用镜像有很大帮助。
POSTGRES_PASSWORD建议您使用此环境变量来使用PostgreSQL镜像。此环境变量设置PostgreSQL的超级用户密码。默认超级用户由POSTGRES_USER环境变量定义。在上面的示例中,它被设置为“mysecretpassword”。
注意:PostgreSQL镜像在本地设置了trust身份验证,因此您可能会注意到从localhost(在同一容器内)连接时不需要密码。但是,如果从不同的主机/容器连接,则需要密码。
POSTGRES_USER此可选环境变量与POSTGRES_PASSWORD一起使用,用于设置用户及其密码。此变量将创建具有超级用户权限的指定用户和同名数据库。如果未指定,则将使用默认用户postgres。
PGDATA此可选环境变量可用于定义数据库文件的另一个位置(如子目录)。默认值为/var/lib/postgresql/data,但如果您使用的数据卷是文件系统挂载点(如GCE持久磁盘),Postgresinitdb建议创建一个子目录(例如/var/lib/postgresql/data/pgdata)来包含数据。
POSTGRES_DB此可选环境变量可用于定义镜像首次启动时创建的默认数据库的不同名称。如果未指定,则将使用POSTGRES_USER的值。
POSTGRES_INITDB_ARGS此可选环境变量可用于向postgres initdb发送参数。该值是postgres initdb期望的以空格分隔的参数字符串。这对于添加数据页校验和等功能很有用:-e POSTGRES_INITDB_ARGS="--data-checksums"。
POSTGRES_INITDB_XLOGDIR此可选环境变量可用于定义Postgres事务日志的另一个位置。默认情况下,事务日志存储在主Postgres数据文件夹(PGDATA)的子目录中。有时,将事务日志存储在不同的目录中可能是可取的,该目录可能由具有不同性能或可靠性特征的存储支持。
--user注意事项从https://github.com/docker-library/postgres/pull/253%E5%BC%80%E5%A7%8B%EF%BC%8C%E6%AD%A4%E9%95%9C%E5%83%8F%E6%94%AF%E6%8C%81%E9%80%9A%E8%BF%87%60docker run上的--user`以(大部分)任意用户运行。
需要注意的主要问题是,postgres不关心它运行的UID(只要/var/lib/postgresql/data的所有者匹配),但initdb关心(并且需要用户存在于/etc/passwd中):
console$ docker run -it --rm --user www-data postgres The files belonging to this database system will be owned by user "www-data". ... $ docker run -it --rm --user 1000:1000 postgres initdb: could not look up effective user ID 1000: user does not exist
解决此问题的两种最简单方法:
从主机以只读方式绑定挂载/etc/passwd(如果您需要的UID是主机上的有效用户):
console$ docker run -it --rm --user "$(id -u):$(id -g)" -v /etc/passwd:/etc/passwd:ro postgres The files belonging to this database system will be owned by user "jsmith". ...
与最终运行时分开初始化目标目录(中间进行chown):
console$ docker volume create pgdata $ docker run -it --rm -v pgdata:/var/lib/postgresql/data postgres The files belonging to this database system will be owned by user "postgres". ... (一旦成功完成初始化并等待连接,停止它) $ docker run -it --rm -v pgdata:/var/lib/postgresql/data bash chown -R 1000:1000 /var/lib/postgresql/data $ docker run -it --rm --user 1000:1000 -v pgdata:/var/lib/postgresql/data postgres LOG: database system was shut down at 2017-01-20 00:03:23 UTC LOG: MultiXact member wraparound protections are now enabled LOG: autovacuum launcher started LOG: database system is ready to accept connections
如果您想在从此镜像派生的镜像中进行额外的初始化,可以在/docker-entrypoint-initdb.d下添加一个或多个*.sql或*.sh脚本(必要时创建该目录)。入口点调用initdb创建默认的postgres用户和数据库后,将运行该目录中找到的任何*.sql文件并 source 任何*.sh脚本,以在启动服务之前进行进一步初始化。
例如,要添加额外的用户和数据库,将以下内容添加到/docker-entrypoint-initdb.d/init-user-db.sh:
bash#!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; EOSQL
这些初始化文件将按照当前区域设置定义的排序名称顺序执行,默认区域设置为en_US.utf8。任何*.sql文件将由POSTGRES_USER执行,默认为postgres超级用户。建议*.sh脚本中运行的任何psql命令都通过使用--username "$POSTGRES_USER"标志以POSTGRES_USER身份执行。由于容器内存在针对Unix套接字连接的trust身份验证,此用户无需密码即可连接。
此外,从https://github.com/docker-library/postgres/pull/253%E5%BC%80%E5%A7%8B%EF%BC%8C%E8%BF%99%E4%BA%9B%E5%88%9D%E5%A7%8B%E5%8C%96%E8%84%9A%E6%9C%AC%E4%BB%A5%60postgres%60%E7%94%A8%E6%88%B7%EF%BC%88%E6%88%96%60docker run的--user标志指定的“半任意用户”;有关更多详细信息,请参见“任意--user`注意事项”部分)身份运行。
您还可以使用简单的Dockerfile扩展镜像以设置不同的区域设置。以下示例将默认区域设置设置为de_DE.utf8:
dockerfileFROM postgres:9.4 RUN localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8 ENV LANG de_DE.utf8
由于数据库初始化仅在容器启动时发生,这允许我们在创建数据库之前设置语言。
如果容器中postgres启动时没有数据库,则postgres将为您创建默认数据库。虽然这是postgres的预期行为,但这意味着在此期间它不会接受传入连接。这在使用自动化工具(如docker-compose)同时启动多个容器时可能会导致问题。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 armhf/postgres 相关的常用 Docker 镜像,适用于 关系型数据库、复杂查询、数据完整性 等不同场景: