You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Compose启动Postgres容器时遇docker-entrypoint.sh权限拒绝

PostgreSQL容器启动权限错误(Docker Compose专属问题)

问题详情

使用Docker Compose部署PostgreSQL 16-alpine服务时,容器启动失败,抛出错误:

error: exec: "/usr/local/bin/docker-entrypoint.sh": stat /usr/local/bin/docker-entrypoint.sh: permission denied

服务配置文件docker-compose.yml:

db:
    restart: always
    image: postgres:16-alpine
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    env_file:
      - ./.env

.env文件内容:

DB_ENGINE=django.db.backends.postgresql
POSTGRES_HOST=db
POSTGRES_DB=djangodb
POSTGRES_PORT=5432
POSTGRES_USER=<some_user>
POSTGRES_PASSWORD=<some_password>

已尝试但无效的操作:

  • 移除卷绑定挂载
  • 使用默认环境变量
  • 强制以root用户运行容器
  • 本地构建镜像并添加权限配置

单独执行docker run命令运行同一镜像可正常创建容器并进入shell,确认问题仅出现在Docker Compose部署场景。

解决方案

1. 清理环境变量冲突

.env文件中多余的变量可能干扰PostgreSQL入口脚本的执行,先简化.env内容,只保留PostgreSQL必需的变量:

POSTGRES_DB=djangodb
POSTGRES_USER=<some_user>
POSTGRES_PASSWORD=<some_password>

然后强制重建容器:

docker-compose up -d --force-recreate db

2. 修复本地挂载目录权限

本地绑定目录的权限可能被错误继承,导致容器内postgres用户无法访问。删除旧目录并重新创建:

rm -rf ./postgresql
mkdir ./postgresql
sudo chown 999:999 ./postgresql  # PostgreSQL Alpine镜像默认使用uid=999的postgres用户

再启动服务:

docker-compose up -d db

3. 清除Docker Compose缓存

Docker Compose可能复用旧的容器状态,彻底清理后重新部署:

docker-compose down -v  # 删除容器、卷及网络
docker-compose build --no-cache db
docker-compose up -d db

4. 检查Docker Compose用户权限

尝试以sudo权限运行Docker Compose,排查是否是当前用户权限不足导致的问题:

sudo docker-compose up -d db

注:长期不建议用sudo运行,解决后需调整用户组权限(将当前用户加入docker组)。

5. 更新Docker Compose版本

旧版Docker Compose可能与新版PostgreSQL镜像存在兼容性问题,更新到最新稳定版:

# Linux系统更新命令示例
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

内容的提问来源于stack exchange,提问作者Alberto Coppi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:41:11