直接在本地计算机上安装 PostgreSQL 可能很麻烦 - 冗长的步骤、特定于作系统的怪癖和潜在的冲突。幸运的是,Docker 使该过程变得超级简单、快速和可移植。让我们来看看如何在 Docker 容器中运行 PostgreSQL。
为什么 docker 中的 postgres ?
- 您无需直接在系统上安装 PostgreSQL。
- 您可以运行多个版本的 PostgreSQL
- Docker 将数据库与主机作系统隔离开来,从而降低了破坏其他内容的风险。
安装 Docker Desktop
首先,您需要下载 docker desktop 并安装并注册。如果您已经完成了此作,则可以跳过此过程。请确保 docker desktop 正在运行整个进程。
运行 PostgreSQL 容器
打开终端并运行命令
docker run --name docker-postgres -e POSTGRES_PASSWORD=mypassword -p 5431:5432 -d postgres:16
故障
- --name : name 代表容器的名称。
- -e : e 代表环境变量。我们正在设置一个环境POSTGRES_PASSWORD。POSTGRES_USER 被指定为 postgres。如果要使用相同的名称 env 变量,可以更改它。
- -d : d 代表分离模式。
- postgres:16 :这是将要运行的图像。如果 postgres:16 图像已存在,它将使用该图像。如果没有,它将从 dockerhub 拉取。
-
-p 5431:5432:将主机 (localhost) 上的端口 5432 映射到容器中的端口 5432。如果已在本地安装了 PostgreSQL,请更改主机端口(例如 )以避免冲突。
-p 5431:5432
-
-e POSTGRES_DB=mydatabase :如果未添加此环境,则会创建名为 postgres 的默认数据库。如果你想将数据库命名为其他名称,你可以使用这个 env.
运行此命令后,验证容器是否在 Docker Desktop UI 中运行:
检查 docker 容器是否正在运行
docker ps
它应该为您提供当前正在运行的所有容器的列表。检查您的容器名称。
连接到 postgres
现在,为了连接到在 docker 容器中运行的 postgreql,请运行命令
docker exec -it docker-postgres psql -U postgres
故障:
docker-postgres
:您的容器名称psql
:要在容器内运行的命令。psql 附带 PostgreSQL 映像。-U postgres
:告知要连接的用户身份psql
-it
:以交互方式运行容器并分配虚拟终端exec
:在正在运行的容器内执行命令
如何创建新数据库。
如果在创建容器时未提供 env,则会为您分配名为 的默认数据库。如果需要新数据库,请运行命令POSTGRES_DB
postgres
CREATE DATABASE outline_database;
如何检查容器内的所有数据库
\l
按 此键可退出 psql shell 寻呼机。
q
下一步是什么?
现在,您已经在 Docker 中运行了 PostgreSQL,您可以:
- 使用 pgAdmin、TablePlus 或 DBeaver 等 GUI 进行连接。
- 在本地开发项目中使用它。
- 使用 Docker 卷持久保存数据(在以后的文章?中探讨)。在正确的设置中,只有在删除容器时,数据才会丢失。
如果您想在 Docker 卷上发表后续文章或与 pgAdmin 联系,请在评论中告诉我!
可能的错误故障排除
错误 1:OCI Runtime Exec 失败
导致错误的命令:
docker exec -it docker-postgres -U postgres
错误信息:
OCI runtime exec failed: exec failed: un able to start container process: exec: "-U": executable file not found in $PATH: unknown
解决方案:
标志属于 ,而不是 。-U
psql
docker exec
正确的命令:
docker exec -it docker-postgres psql -U postgres
错误 2:数据库创建失败
导致错误的命令:
CREATE DATABASE outline-database
错误信息:
ERROR: syntax error at or near "-"
LINE 1: CREATE DATABASE outline-database
解决 方案:
- 数据库名称不能包含连字符(使用下划线)
- SQL 命令需要分号终止符
正确的命令:
CREATE DATABASE outline_database;
发表评论 取消回复