Ограничение памяти контейнера Docker Swarm не работает - PullRequest
0 голосов
/ 29 сентября 2018

Я экспериментирую с тем, чтобы заставить контейнер использовать больше памяти, чем это разрешено, но я не могу заставить его работать.Контейнер является частью стека, определенного с помощью docker compose, и он развертывается на docker в режиме роя.

Docker позволяет контейнеру превышать установленный мною предел в 50 МБ.Я ожидал, что Docker убьет контейнер, выдаст ошибку и т. Д.

Кто-нибудь может мне помочь, почему Docker не устанавливает здесь ограничение памяти?

Контейнер в docker-compose.ymlопределяется как ограничение памяти 50M, а затем я установил очень простой тест PHP, который попытается выделить 200M.Я определил ограничение PHP mem для 128M.

Это мой docker-compose.yml

  version: "3"

  services:
    nginx:
      image: nginx:latest
      restart: unless-stopped
      volumes:
        - ./deploy/nginx/nginx.conf:/etc/nginx/nginx.conf
        - ./public:/usr/share/nginx/html
      ports:
        - "8180:80"
      links:
        - app

    app:
      image: 127.0.0.1:5000/wpdemo
      build:
        context: .
        dockerfile: Dockerfile-app
      restart: unless-stopped
      volumes:
        - .:/var/www/html
      links:
        - mysql
      deploy:
        resources:
          limits:
            cpus: '0.50'
            memory: 50M
          reservations:
            cpus: '0.25'
            memory: 20M

    mysql:
        image: mysql:5.7
        restart: unless-stopped
        ports:
            - "13306:3306"
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - ~/docker/volumes/mysql:/var/lib/mysql

Вместо того, чтобы docker убивает контейнер, он позволяет ему занимать столько памяти, сколько онхочет и PHP в конечном итоге останавливает процесс, выдавая следующую ошибку:

"Сообщение PHP: фатальная ошибка PHP: допустимый объем памяти 125829120 байт исчерпан (попытка выделить 67108872 байт) в / var / www / html/public/index.php в строке 4 "

Я использую Ubuntu 18.04.

uname -a
Linux  4.18.10-041810-generic #201809260332 SMP Wed Sep 26 07:34:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Docker версия 18.06.1-ce, сборка e68fc7a

docker-compose версия 1.17.1, сборка неизвестна docker-py версия: 2.5.1 Версия CPython: 2.7.15rc1 OpenSSL версия: OpenSSL 1.1.0g 2 ноября 2017

Это вывод "docker stats" для контейнера приложения:

CONTAINER ID        NAME                                        CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
679c8495ac1d        stackdemo_app.1.hr3ufwlskhdafre39aqrshxyu   0.00%               43.81MiB / 50MiB    87.62%              106kB / 389kB       2.05GB / 10.6GB     5

Это вывод "Информация о докере ":

Containers: 36
 Running: 5
 Paused: 0
 Stopped: 31
Images: 450
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: wnegv5lp41wfs3epfrua489or
 Is Manager: true
 ClusterID: hq7o176yffjglxzb9pu3fiomr
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 10
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 192.168.1.120
 Manager Addresses:
  192.168.1.120:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.18.10-041810-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.49GiB
Name: rafxps15
ID: QEX7:FEB3:J76L:DCAQ:SO4S:SWVE:4XPI:PI6R:YM4C:MV4I:C3PM:FLOQ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support

1 Ответ

0 голосов
/ 02 октября 2018

Как вы сказали в комментарии, подкачка включена на хосте, но ограничение подкачки в cgroups пока не поддерживается.

В соответствии с этим разрешением поддержка ограничения свопинга .Обратите внимание, что перезагрузка системы необходима.

Наконец, должен быть установлен флаг —-memory-swap.Если вы хотите запретить вашему PHP-приложению доступ к свопу, вам следует установить для него то же значение —-memory.Подробнее о настройках подкачки памяти .

...