无法启动 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 标签 13
和 14
似乎在使用 Debian 的 bullseye
,这似乎改变了文件系统方面的内容。
目前有两种解决方案:
- 降级到 PostgreSQL
13-buster
,即 Docker 标签 postgres:13.4-buster
,似乎 14
没有 -buster
等价物。
- 升级当前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修复此问题。
正在尝试根据 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 标签 13
和 14
似乎在使用 Debian 的 bullseye
,这似乎改变了文件系统方面的内容。
目前有两种解决方案:
- 降级到 PostgreSQL
13-buster
,即 Docker 标签postgres:13.4-buster
,似乎14
没有-buster
等价物。 - 升级当前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修复此问题。