一、下载Postgresql镜像

docker pull postgres:9.4.26

二、创建宿主机文件夹

mkdir -p /usr/local/postgres/data

三、创建Postgresql容器

docker run --name postgres --restart always -e POSTGRES_PASSWORD='admin' -e POSTGRES_USER='admin' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /usr/local/postgres/data:/var/lib/postgresql -p 5432:5432 -d postgres:9.4.26

–name 自定义容器名称
–restart=always 重启docker时,自动启动容器
-e POSTGRES_PASSWORD: Postgresql数据库密码
-e POSTGRES_USER: Postgresql数据库账号
-e ALLOW_IP_RANGE=0.0.0.0/0,表示允许所有ip访问,如果不加,则非本机ip访问不了
-v 本地文件系统目录:容器内目录(v是volume的简写,即绑定一个卷,冒号前的路径为宿主机的路径(如果指定路径不存在会自动创建目录),冒号后为容器内路径。容器会把宿主机的目录映射到容器内的路径,这样容器运行中生成的数据实际上就是写到了宿主机的指定路径上,即使容器删除了,此路径的文件也不会删除,这样就做到了数据库的持久化存储。还可以通过docker volume提供的相关命令显式地创建volume:docker volume create postgres-volume,然后再挂载到容器上:postgres-volume:/var/lib/postgresql/data,这里不做详细介绍,请自行查询相关内容)
-p 映射端口,宿主机端口: 容器端口。如果不指定端口映射,只有在容器内可以访问数据库,外部是无法访问的;
-d 是detached模式运行(即以分离模式运行容器,以便它在后台运行)
postgres:9.4.26:表示镜像的名称,docker基于上步拉取的镜像创建出容器

启动失败

在这里插入图片描述

查看日志

docker logs postgres

在这里插入图片描述
这个错误是由于容器内的 PostgreSQL 数据目录无法创建而导致的。该目录的默认位置是 /var/lib/postgresql/data。通常,此问题是由于文件系统权限配置不正确或该目录不可写入所导致的。

给宿主机赋值权限

chown 777 /usr/local/postgres10 /usr/local/postgres/data

四、navicat连接数据库

创建超级用户

CREATE USER pgsqldb1 superuser PASSWORD 'pgsqldb1';

创建用户和角色唯一的区别是:创建用户默认有login权限,创建角色默认没有login权限。

五、常用命令

-- 查看所有角色
SELECT rolname FROM pg_roles;

-- 基础创建(仅登录权限)
CREATE ROLE pgsqldb1 WITH LOGIN;

-- 常用创建(带密码、可创建数据库/角色)
CREATE ROLE pgsqldb1 WITH 
  LOGIN               -- 允许登录
  PASSWORD '你的密码'  -- 设置密码(替换成实际密码)
  CREATEDB            -- 允许创建数据库
  CREATEROLE;         -- 允许创建其他角色

-- 如果需要让该角色拥有超级权限(仅测试/特殊场景用)
-- CREATE ROLE pgsqldb1 WITH LOGIN SUPERUSER PASSWORD '你的密码';
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐