ubuntu Postgres容器无法启动,出现initdb错误,出现故障:无法分配内存

5lhxktic  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(604)

我在Ubuntu 20.04下的AWS示例上使用postgres:12 Docker镜像。

postgres-tests:
    image: "postgres:12"
    restart: always
    command: postgres -c 'max_connections=200'
    environment:
      POSTGRES_DB: "${POSTGRES_DATABASE}"
      POSTGRES_USER: "${POSTGRES_USER}"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    ports:
      - "8396:5432"

使用docker-compose up -d运行此容器时,无法启动,并出现以下错误:

postgres-tests_1  | popen failure: Cannot allocate memory
postgres-tests_1  | initdb: error: The program "postgres" is needed by initdb but was not found in the
postgres-tests_1  | same directory as "/usr/lib/postgresql/12/bin/initdb".
postgres-tests_1  | Check your installation.

最新项目部署后突然出现错误。重要的是,错误只发生在这个特定的容器上。机器上还有一个postgresql:12容器用于另一个项目,工作正常。

以下是我尝试的:

1.我发现了几个与增加控制机器上共享内存的shmall/shmmax参数有关的建议。
但是这些系统参数已经设置为高值:

ubuntu@ip-172-31-10-246:/var/www$ cat /proc/sys/kernel/shmall
18446744073692774399
ubuntu@ip-172-31-10-246:/var/www$ cat /proc/sys/kernel/shmmax
18446744073692774399
ubuntu@ip-172-31-10-246:/var/www$

1.第二个建议是尝试更新postgres镜像。使用postgres 13.0、14.0进行测试,无影响。更新尝试了postgres:11图像,它运行正常,但我不能在生产中滚动postgres版本,所以它不是我的情况下的解决方案。
1.我尝试停止/启动并重新启动示例,同时使用docker system prunedocker volumes prune清理docker缓存。

Software:
Ubuntu 20.04.2
Docker version 20.10.8, build 3967b7d

Instance hardware:
Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz 
RAM:  4/8GB Used by system and other services
Swap: 4.5/20GB Used by system and other services
b1zrtrql

b1zrtrql1#

看起来像是Docker 5:20.10.8~3-0~ubuntu-focal和官方postgres:12镜像的最近更新之间的某种版本不兼容。
将Docker更新为5:23.0.6-1~ubuntu.20.04~focal解决了这个问题。

相关问题