简体   繁体   English

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

[英]Increase /dev/shm in docker container in swarm environment (docker stack deploy)

I know is possible to increase default 64MB /dev/shm in docker container from docker run or docker compose.我知道可以通过 docker run 或 docker compose 在 docker 容器中增加默认的 64MB /dev/shm。 As example this works in our local development machines.例如,这适用于我们的本地开发机器。

version: '3.5'
services:
  postgres:
    image: postgres
    shm_size: '1gb'

However when I try to do it in our swarm docker stack deploy stack_name -c docker-compose.yml I get a "Ignoring unsupported options: shm_size" and shm mount remains as default 64MB.但是,当我尝试在我们的 swarm docker stack deploy stack_name -c docker-compose.yml 中执行此操作时,我收到“忽略不支持的选项:shm_size”并且 shm 挂载仍为默认 64MB。

What can I do?我能做什么? I tried to create an image with this parameter but it seems is not something that I can add to image built, more like a runtime option.我试图用这个参数创建一个图像,但它似乎不是我可以添加到图像中的东西,更像是一个运行时选项。 It's possible to modify it after container creation?创建容器后可以修改它吗?

Environment is an Ubuntu 16.04 with docker 17.12 in a single node swarm.环境是 Ubuntu 16.04 和 docker 17.12 在单节点群中。

You need to use a more recent version of Docker Compose. 您需要使用更新版本的 Docker Compose。 The latest version (docker-compose version 1.24.0, build 0aa5906) certainly supports it. 最新版本(docker-compose version 1.24.0,build 0aa5906)当然支持它。

The above answer was assuming Docker Compose, but docker swarm is not the same thing at all.上面的答案是假设 Docker Compose,但docker swarm根本不是一回事。 docker swarm does not yet support shm_size in the configuration file , but does seem to have workarounds. shm_size docker swarm尚不支持配置文件中的shm_size ,但似乎有解决方法。

You can add the following code in docker-compose.yml.您可以在 docker-compose.yml 中添加以下代码。 It will directly add a tmpfs volume targetting /dev/shm:它将直接添加一个针对 /dev/shm 的 tmpfs 卷:

volumes:
      - type: tmpfs
        target: /dev/shm
        tmpfs:
           size: 4096000000 # (this means 4GB)

I found solution for docker swarm:我找到了 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM