#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
игнорируется.