在集群环境中增加docker容器中的/ dev / shm(docker stack deploy)

时间:2019-03-29 11:54:32

标签: postgresql docker docker-compose swarm

我知道可以从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。

3 个答案:

答案 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