我正在尝试使用 docker-compose 启动 cassandra 容器。我从我的 macbook 终端发出以下命令。
docker-compose -f src/main/docker/cassandra.yml up
我的 cassandra.yml 文件位于下面
version: '2'
services:
primecast-cassandra:
image: cassandra:3.9
# volumes:
# - ~/volumes/jhipster/primecast/cassandra/:/var/lib/cassandra/data
ports:
- 7000:7000
- 7001:7001
- 7199:7199
- 9042:9042
- 9160:9160
primecast-cassandra-migration:
extends:
file: cassandra-migration.yml
service: primecast-cassandra-migration
environment:
- CREATE_KEYSPACE_SCRIPT=create-keyspace.cql
但是,当我运行 docker-compose 命令来启动 cassandra 服务时,我在终端上收到一些警告并最终停止。
primecast-cassandra_1 | WARN 14:33:45 Unable to lock JVM memory (ENOMEM).
This can result in part of the JVM being swapped out, especially with mmapped I/O enabled. Increase RLIMIT_MEMLOCK or run Cassandra as root.
感谢您的帮助 谢谢
最佳答案
本质上,此消息告诉您需要为特定用户的锁定内存指定 memlock unlimited
来限制 Linux 系统资源。根据documentation on recommended production settings ,解决此问题的正常(非 Docker)方法是调整 /etc/security/limits.conf
文件(或等效文件),如下所示:
cassandra - memlock unlimited
在上面的示例中,cassandra
是运行 Cassandra 的用户。如果您以其他用户身份运行 Cassandra,则需要相应更改或仅使用星号 (*) 为所有用户强制执行该设置。例如:
* - memlock unlimited
在本例中为 Docker Compose v2 , ulimits
应该是服务配置下的有效条目。将 memlock
设置为 -1
,以便软限制和硬限制都是“无限制”:
primecast-cassandra:
image: cassandra:3.9
ulimits:
memlock: -1
ports:
关于docker-compose - 无法启动cassandra : Unable to lock JVM memory (ENOMEM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69407951/