Увеличить /dev /shm в контейнере docker в среде swarm (развертывание стека docker)

#postgresql #docker #docker-compose #swarm

#postgresql #docker #docker-compose #swarm

Вопрос:

Я знаю, что возможно увеличить / dev / shm по умолчанию на 64 МБ в контейнере docker из docker run или docker compose. В качестве примера это работает на наших локальных компьютерах разработки.

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

Однако, когда я пытаюсь сделать это в нашем swarm docker stack deploy stack_name -c docker-compose.yml, я получаю «Игнорирование неподдерживаемых параметров: shm_size», а shm mount остается по умолчанию 64 МБ.

Что я могу сделать? Я пытался создать изображение с этим параметром, но, похоже, это не то, что я могу добавить к созданному изображению, больше похоже на опцию времени выполнения. Это возможно изменить после создания контейнера?

Среда представляет собой Ubuntu 16.04 с docker 17.12 в рое с одним узлом.

Ответ №1:

Вы можете добавить следующий код в docker-compose.yml. Это напрямую добавит том tmpfs, предназначенный для /dev / shm:

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

Комментарии:

1. Похоже, это официальное решение, спасибо за пример!

Ответ №2:

Вам необходимо использовать более свежую версию Docker Compose. Последняя версия (версия 1.24.0 docker-compose, сборка 0aa5906), безусловно, поддерживает это.

Приведенный выше ответ предполагал, что Docker Compose, но docker swarm это совсем не одно и то же. docker swarm пока не поддерживается shm_size в файле конфигурации, но, похоже, имеет обходные пути.

Комментарии:

1. Он по-прежнему не работает с последней версией (той, что в вашем ответе). После выполнения этой команды docker stack deploy --compose-file docker-compose.swarm.yml my_stack у меня появляется следующее предупреждение: Ignoring unsupported options: shm_size

Ответ №3:

Я нашел решение для 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
  

Комментарии:

1. У меня это сработало, хотя строка shm_size игнорируется.