我知道可以从docker run或docker compose增加docker容器中默认的64MB / dev / shm。例如,这在我们的本地开发机器中有效。
version: '3.5'
services:
postgres:
image: postgres
shm_size: '1gb'
但是,当我尝试在我们的大型docker堆栈中部署stack_name -c docker-compose.yml时,我得到“忽略不受支持的选项:shm_size”,而shm挂载仍为默认64MB。
我该怎么办?我尝试使用此参数创建映像,但似乎无法将其添加到所生成的映像中,更像是运行时选项。创建容器后可以修改它吗?
Environment是一个Ubuntu 16.04,在单个节点群中具有docker 17.12。
答案 0 :(得分:3)
您可以在docker-compose.yml中添加以下代码。它将直接添加一个针对/ dev / shm的tmpfs卷:
volumes:
- type: tmpfs
target: /dev/shm
tmpfs:
size: 4096000000 # (this means 4GB)
答案 1 :(得分:2)
您需要使用较新版本的Docker Compose。当然,最新版本(docker-compose版本1.24.0,内部版本0aa5906)也支持它。
以上答案假设是Docker Compose,但是docker swarm
根本不是一回事。 docker swarm
does not yet support shm_size
in the configuration file,但似乎有解决方法。
答案 2 :(得分:1)
我找到了docker swarm的解决方案:
postgres:
image: postgres:11-alpine
shm_size: "512M"
command: >
postgres
-c shared_preload_libraries='pg_stat_statements'
-c pg_stat_statements.track=all
-c max_connections=200
-c shared_buffers=256MB
-c statement_timeout=1800000
ports:
- 5432:5432
environment:
POSTGRES_DB: my_db
POSTGRES_PASSWORD: 123123
POSTGRES_USER: my_user
TZ: "Europe/Moscow"
tmpfs:
- /tmp:size=512M
volumes:
- /etc/localtime:/etc/localtime:ro
- type: tmpfs
target: /dev/shm
networks:
- default