Docker无法启动Postgresql容器

目录

问题描述

拉取了一个Postgresql14.2的镜像,在docker run创建并运行容器之后使用docker ps发现容器没有跑起来,再次使用docker start也没跑起来。

shell 复制代码
docker run -d --name mypg -v psql-data:/var/lib/postgresql/data -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=admin -p 5432:5432 postgres:14.2

后面我尝试了以下的解决方案:

  1. 重启docker,删除容器之后再次docker run无法运行
  2. 修改指令,docker run -ddocker run -dit(后台运行→前台交互运行)→无法运行

解决问题

这时候只能看容器的日志了docker logs mypg(mypg是容器名)

shell 复制代码
[root@VM-8-9-centos lib]# docker logs mypg
ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

这样我就好百度解决问题了

原因: 权限问题。

解决:

  1. docker rm删除容器
  2. 重新run,并加上--privileged=true(让容器以privileged模式运行,即拥有几乎与主机(root)相同的权限)

注意: 使用--privileged=true选项可以让容器执行一些通常不能执行的操作,例如加载内核模块、直接操作硬件设备等。然而,这也带来了严重的安全隐患。由于privileged容器具有几乎与主机相同的权限,如果容器被恶意代码控制,攻击者可以轻易地突破容器的边界,对主机进行任意操作。

建议使用其他更细粒度的权限控制手段,例如通过 --cap-add--device 参数来分别添加必要的capabilities或设备访问权限。这样可以更好地控制容器的权限,并减少潜在的安全风险,如下。

shell 复制代码
docker run --cap-add SYS_ADMIN -d mypg [省略]

至于该配置什么权限,可以参考这篇博客:https://developer.aliyun.com/article/722230

相关推荐
golang学习记15 小时前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
PGCCC19 小时前
Ubuntu 安装 PostgreSQL 16 完整教程(2026):从仓库配置到远程连接
linux·ubuntu·postgresql
张忠琳19 小时前
【NPU】Ascend Device Plugin —Part 6 K8s客户端 + 重复检测模块 超深度源码分析之二
云原生·容器·kubernetes·npu·docker device
雨声不在20 小时前
私有 Docker Registry 排障实录:两个隐蔽的坑
docker·容器
云川之下20 小时前
【k8s】SR‑IOV‑Network‑Operator 详解
云原生·容器·kubernetes
读书读傻了哟20 小时前
解决docker拉取镜像报错failed to resolve reference “docker.io/xxx“...i/o timeout问题
运维·docker·容器
Ai拆代码的曹操1 天前
DaemonSet OnDelete 策略详解:为何 rollout restart 无效及正确迁移方案
docker·容器·kubernetes
名字还没想好☜1 天前
Kubernetes NetworkPolicy 实战:默认全通的坑与用标签做零信任隔离
运维·云原生·容器·kubernetes·networkpolicy
瑞码空间1 天前
Web应用的多端部署之道:浏览器 · Electron · Docker
前端·docker·electron·浏览器·web
badhope1 天前
Docker镜像从2GB压到80MB——我被运维追着打了三天才学会的容器瘦身术
docker