无法启动 PostgreSQL Docker 容器 – “'/docker-entrypoint-initdb.d/': 不允许操作”

Cannot start PostgreSQL Docker container – "'/docker-entrypoint-initdb.d/': Operation not permitted"

正在尝试根据 https://hub.docker.com/_/postgres 处的说明启动 PostgreSQL 容器(如何使用此映像启动 postgres 实例),

docker run -e POSTGRES_PASSWORD=mysecretpassword postgres:14

给出以下错误:

ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

唯一的变化是在使用 PostgreSQL 的版本标签 14 时删除了 --name-d 参数。但即使使用来自 Docker Hub 的完全相同的命令,也会出现相同的错误。

为什么会这样,如何解决?是PostgreSQL镜像的bug还是系统配置问题?


附加信息:

$ docker version
Client:
 Version:    17.12.0-ce
 API version:    1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built:    Wed Dec 27 20:10:45 2017
 OS/Arch:    linux/amd64

Server:
 Engine:
  Version:    17.12.0-ce
  API version:    1.35 (minimum version 1.12)
  Go version:    go1.9.2
  Git commit:    c97c6d6
  Built:    Wed Dec 27 20:09:19 2017
  OS/Arch:    linux/amd64
  Experimental:    false

$ uname -r
5.13.0-16-generic

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=21.10
DISTRIB_CODENAME=impish
DISTRIB_DESCRIPTION="Ubuntu 21.10"

$ docker images postgres:latest
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              14e58c3f6369        6 days ago          374MB
$ docker images postgres:14
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            14                  14e58c3f6369        6 days ago          374MB

看起来它适用于 postgres:14-alpine

我遇到了同样的问题。

PostgreSQL Docker 标签 1314 似乎在使用 Debian 的 bullseye,这似乎改变了文件系统方面的内容。

目前有两种解决方案:

  1. 降级到 PostgreSQL 13-buster,即 Docker 标签 postgres:13.4-buster,似乎 14 没有 -buster 等价物。
  2. 升级当前Docker你是运行。从 Docker 版本开始 20.10.6,似乎解决了这个问题。

作为与此问题相关的 GitHub 上的问题的参考,您可以在 root user has no permissions within container #884 .

找到它

为了后代,GitHub的解决方案:

you'll need to update Docker, runc, and likely libseccomp on your host.

如果您不能或不想(无论出于何种原因)升级 Docker,一个快速的解决方法是使用不同的标签,例如 postgres:14-alpine.

版本postgres:12.9出现问题升级到版本postgres:13-alpine修复此问题。